1. 程式人生 > >hihoCoder編程練習賽69

hihoCoder編程練習賽69

ring include 秘密 cond i++ pen space ptr gif

題目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


hihoCoder編程練習賽69