Fellow me on GitHub

hihoCoder编程练习赛69

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

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

描述

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

输入

输入包含多组数据。

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

1 ≤ |S| ≤ 105

输出

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

样例输入
cabbad
ababa
样例输出
YES
NO
 1 // 2018-07-29
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 
 7 using namespace std;
 8 
 9 string str;
10 
11 bool check(int p){
12     if(str[p] == str[p+1])return true;
13     else return false;
14 }
15 
16 int main()
17 {
18     while(cin>>str){
19         int len = str.length();
20         bool ok = false;
21         for(int ptr = 0; ptr < len-1; ptr++)
22             if(check(ptr)){
23                 cout<<"YES"<<endl;
24                 ok = true;
25                 break;
26             }
27         if(!ok)cout<<"NO"<<endl;
28     }
29 
30     return 0;
31 }
View Code

 

题目2 : 特工配对

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

描述

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

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

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

输入

第一行一个正整数 n

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

1 ≤ n ≤ 103

0 ≤ ai ≤ 109

输出

输出最多组成几个配对

样例输入
3
1 2 3
样例输出
3
 1 // 2018-07-29
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 
 7 using namespace std;
 8 
 9 int main()
10 {
11     int n, a;
12     cin>>n;
13     long long sum = 0;
14     int mx=0;
15     for(int i = 0; i < n; i++){
16         cin>>a;
17         sum += a;
18         mx = max(mx, a);
19     }
20     if(mx > sum-mx)cout<<sum-mx<<endl;
21     else cout<<sum/2<<endl;
22 
23     return 0;
24 }
View Code

 

题目3 : 阶乘问题

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

描述

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

输入

第一行两个正整数 n, k

2 ≤ n,k ≤ 109

输出

输出最大的 m

样例输入
5 2
样例输出
3
 1 // 2018-07-29
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 #include <map>
 7 #define ll long long
 8 
 9 using namespace std;
10 
11 const ll INF = 0x3f3f3f3f3f3f3f3f;
12 
13 map<ll, ll> factor;
14 
15 void get_fact(ll k){
16     for(ll i = 2; i <= k; i++){
17         if(k%i == 0){
18             while(k%i==0){
19                 factor[i]++;
20                 k/=i;
21             }
22         }
23     }
24 }
25 
26 void print_factor(){
27     for(auto &f: factor){
28         cout<<f.first<<" "<<f.second<<endl;
29     }
30 }
31 
32 int main()
33 {
34     ll n, k;
35     while(cin>>n>>k){
36         factor.clear();
37         if(k > n){
38             cout<<0<<endl;
39             continue;
40         }
41         get_fact(k);
42         ll ans = INF;
43         for(auto &f: factor){
44             ll a = f.first;
45             ll b = f.second;
46             ll sum = 0;
47             ll tmp = a;
48             while(tmp <= n){
49                 sum += n/tmp;
50                 tmp *= a;
51             }
52             ans = min(ans, sum/b);
53         }
54         cout<<ans<<endl;
55     }
56 
57     return 0;
58 }
View Code

 


posted @ 2018-07-29 17:05  Penn000  阅读(234)  评论(0编辑  收藏  举报