题目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 ;
}