The 15th Zhejiang Provincial Collegiate Programming Contest(部分題解)
阿新 • • 發佈:2018-10-30
begin iter 一個數 ons opera cst style string +=
ZOJ 4024 Peak
題意
給出n和n個數,判斷該數列是否是凸形的。
解題思路
從前往後第一對逆序數,和從後往前第一隊逆序數,如果都非零而且相鄰,證明該數組是凸形的。
代碼
1 #include <cstdio> 2 const int maxn = 100000 + 10; 3 int a[maxn]; 4 5 int main() 6 { 7 int T; 8 scanf("%d", &T); 9 while(T--) { 10 int n; 11 scanf("%d", &n); 12 for(int i = 0; i < n; i++) { 13 scanf("%d", &a[i]); 14 } 15 int q = 0, h = 0, i; 16 for(i = 0; i < n - 1; i++) { 17 if(a[i] < a[i + 1]) 18 q++; 19 else 20 break; 21 } 22 for(; i < n - 1; i++) { 23 if(a[i] > a[i + 1]) 24 h++; 25 else 26 break; 27 } 28 //printf("%d %d\n", q, h); 29 30 if(q && h && q + h == n - 1) 31 puts("Yes"); 32 else 33 puts("No"); 34 } 35 return 0; 36 }
ZOJ 4025 King of Karaoke
題意
給出n,然後給出兩個長度為n的序列S 和 D,問給每個D加上一個數k(可正,可負,可零),最大的耦合度是多少
解題思路
先用S減D得到每個差值的次數,然後找到差值次數最多的數即可。
代碼
1 #include <cstdio> 2 #include <map> 3 4 using namespace std; 5 const int maxn = 100000 + 10; 6 int D[maxn], S[maxn]; 7 int n; 8 9 map<int, int> mp; 10 int main() 11 { 12 int T; 13 scanf("%d", &T); 14 while(T--) { 15 scanf("%d", &n); 16 for(int i = 0; i < n; i++) { 17 scanf("%d", &D[i]); 18 } 19 for(int i = 0; i < n; i++) { 20 scanf("%d", &S[i]); 21 } 22 23 mp.clear(); 24 for(int i = 0; i < n; i++) { 25 mp[S[i] - D[i]]++; 26 } 27 int maxc = 0; 28 map<int, int>::iterator it; 29 for(it = mp.begin(); it != mp.end(); it++) { 30 if((*it).second > maxc) 31 maxc = (*it).second; 32 } 33 printf("%d\n", maxc); 34 } 35 return 0; 36 }
ZOJ 4036 Lucky 7
給出n和k,然後n個數,只要有一個數加上k能夠將7整除,就是Yes。
1 #include <cstdio> 2 3 int n, k; 4 int main() 5 { 6 int T; 7 scanf("%d", &T); 8 while(T--) { 9 scanf("%d%d", &n, &k); 10 int a, f = 0; 11 for(int i = 0; i < n; i++) { 12 scanf("%d", &a); 13 if((a + k) % 7 == 0) 14 f = 1; 15 } 16 if(f) 17 puts("Yes"); 18 else 19 puts("No"); 20 } 21 return 0; 22 }
ZOJ 4035 Doki Doki Literature Club
給出n個單詞列表和單詞限制數m,然後每個單詞的滿足度,問組成m個最大滿意度的單詞列表。
排序,註意先按滿意度排,再按照字典序排,另外可能超int範圍。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace std; 6 const int wl = 15 + 10; 7 const int maxw = 100 + 10; 8 struct Word { 9 char w[wl]; 10 int s; 11 bool operator < (const struct Word &a) const { 12 if(a.s == s) { 13 if(strcmp(a.w, w) > 0) 14 return 1; 15 else 16 return 0; 17 } 18 return a.s < s; 19 } 20 }wo[maxw]; 21 22 int n, m; 23 int main() 24 { 25 int T; 26 scanf("%d", &T); 27 while(T--) { 28 scanf("%d%d", &n, &m); 29 for(int i = 1; i <= n; i++) { 30 scanf("%s %d", wo[i].w, &wo[i].s); 31 } 32 33 sort(wo + 1, wo + n + 1); 34 /*for(int i = 1; i <= n; i++) { 35 printf("%s %d\n", wo[i].w, wo[i].s); 36 }*/ 37 long long sc = 0; 38 for(int i = 1; i <= m; i++) { 39 sc += (long long)(m - i + 1) * wo[i].s; 40 } 41 printf("%lld",sc); 42 for(int i = 1; i <= m; i++) { 43 printf(" %s", wo[i].w); 44 } 45 puts(""); 46 } 47 return 0; 48 }
The 15th Zhejiang Provincial Collegiate Programming Contest(部分題解)