题目1 : 偶数长度回文子串

时间限制:5000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个小写字母字符串,请判断它是否有长度为偶数的非空连续回文子串

输入

输入包含多组数据。

每组数据包含一行一个小写字母字符串 S

1 ≤ |S| ≤ 105

输出

对于每组数据如果存在,输出YES,否则输出NO

样例输入
cabbad
ababa
样例输出
YES
NO
 // 2018-07-29
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; string str; bool check(int p){
if(str[p] == str[p+])return true;
else return false;
} int main()
{
while(cin>>str){
int len = str.length();
bool ok = false;
for(int ptr = ; ptr < len-; ptr++)
if(check(ptr)){
cout<<"YES"<<endl;
ok = true;
break;
}
if(!ok)cout<<"NO"<<endl;
} return ;
}

题目2 : 特工配对

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

在 A 国有一个秘密特工组织,这个特工组织是由若干对双人组合构成的

现在特工组织有一批新人加入,为了防止背叛,组织规定来自相同城市的人不能配对在一起

现在已知 A 国有 n 个城市,且新人中来自第 i 个城市的有 ai 人,求最多组成几个配对

输入

第一行一个正整数 n

第二行 n 个数,第 i 个数是 ai

1 ≤ n ≤ 103

0 ≤ ai ≤ 109

输出

输出最多组成几个配对

样例输入
3
1 2 3
样例输出
3
 // 2018-07-29
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int main()
{
int n, a;
cin>>n;
long long sum = ;
int mx=;
for(int i = ; i < n; i++){
cin>>a;
sum += a;
mx = max(mx, a);
}
if(mx > sum-mx)cout<<sum-mx<<endl;
else cout<<sum/<<endl; return ;
}

题目3 : 阶乘问题

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

给定 n, k,求一个最大的整数 m,使得 km 是 n! 的约数

输入

第一行两个正整数 n, k

2 ≤ n,k ≤ 109

输出

输出最大的 m

样例输入
5 2
样例输出
3
 // 2018-07-29
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
#define ll long long using namespace std; const ll INF = 0x3f3f3f3f3f3f3f3f; map<ll, ll> factor; void get_fact(ll k){
for(ll i = ; i <= k; i++){
if(k%i == ){
while(k%i==){
factor[i]++;
k/=i;
}
}
}
} void print_factor(){
for(auto &f: factor){
cout<<f.first<<" "<<f.second<<endl;
}
} int main()
{
ll n, k;
while(cin>>n>>k){
factor.clear();
if(k > n){
cout<<<<endl;
continue;
}
get_fact(k);
ll ans = INF;
for(auto &f: factor){
ll a = f.first;
ll b = f.second;
ll sum = ;
ll tmp = a;
while(tmp <= n){
sum += n/tmp;
tmp *= a;
}
ans = min(ans, sum/b);
}
cout<<ans<<endl;
} return ;
}
05-11 13:48