2018浙江省省赛
A - Peak ZOJ - 4024
题目大意:判断数列是否是先递增后递减数列
从两端分别以递增和递减判断 看第一个不满足递增或递减的数是否相等并且没越界就可以了
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<vector> 7 #include<queue> 8 #include<map> 9 #include<set> 10 int main(){ 11 int t; 12 scanf("%d", &t); 13 int n; 14 int a[100005]; 15 while (t--){ 16 memset(a, 0, sizeof(a)); 17 scanf("%d", &n); 18 for (int i = 1; i <= n; i++) scanf("%d", &a[i]); 19 int l = 1, r = n; 20 while (l < n && a[l] < a[l + 1]) l++; 21 while (r > 1 && a[r] < a[r - 1]) r--; 22 if (l == r && l != 1 && l != n) cout<<"Yes"<<endl; 23 else cout<<"No"<<endl; 24 } 25 return 0; 26 }
B - King of Karaoke ZOJ - 4025
求两个序列的相对元素的差出现次数最多的,最低出现一次。
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 using namespace std; 5 const int maxn = 100005; 6 int test,n,d[maxn],x; 7 int main() 8 { 9 ios::sync_with_stdio(false); 10 cin >> test; 11 while (test--) 12 { 13 cin >> n; 14 for (int i = 0;i < n;i++) cin >> d[i]; 15 map<int, int> mp; 16 int ans = 1; 17 for (int i = 0;i < n;i++) 18 { 19 cin >> x; 20 mp[d[i] - x]++; 21 if (mp[d[i] - x] > ans) 22 ans = mp[d[i] - x]; 23 } 24 cout << ans << endl; 25 } 26 return 0; 27 }
I - Magic Points ZOJ - 4032
题意:给你3n个点,编号从0到3n-1,呈正方形分布,找n对点连起来,让线与线的交点经可能多。
题解:最下面的这n个点,前n - 1个点和第n + 1到 2n - 1个点相连,第n个点和第3n - 2个相连。特判一下n == 2 的情况。
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <queue> 6 using namespace std; 7 typedef long long ll; 8 int main() 9 { 10 int t, n; 11 scanf("%d", &t); 12 while (t--) 13 { 14 scanf("%d", &n); 15 if (n == 2) { 16 printf("0 2 1 3\n"); 17 continue; 18 } 19 for (int i = 0; i < n - 1; i++) 20 { 21 printf("%d %d ", i, i + n); 22 } 23 printf("%d %d\n", n - 1, 3 * n - 2); 24 } 25 return 0; 26 }
J - CONTINUE...? ZOJ - 4033
题意:第一行给出T代表有几个测试样例,第二行给出n代表有几个人,第三行给出一个由0和1组成的字符串,0代表女生,1代表男生。并且第i个人有i个宝石。现在要把这些人分为四组,G1 G2 两组是女生组,G3 G4两组是男生组。分配后要满足 (G1+G3)的宝石 ==(G2+G4)的宝石然后输出这些人被分配到哪一组的字符串。如果有多个结果随便哪一个都行,如果没有结果输出-1。
1 #include<iostream> 2 #include<map> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #include<cmath> 7 #include<queue> 8 #include<cstdio> 9 #include<set> 10 #define inf 0x3f3f3f3f 11 const int maxn = 110; 12 using namespace std; 13 int main() { 14 int T; 15 scanf("%d", &T); 16 while (T--) { 17 long long int n; 18 scanf("%lld", &n);//因为要求下面的sum,如果是int就会爆。 19 char s[100010]; 20 long long str[100010] = { 0 }; 21 getchar(); 22 for (int i = 1;i <= n;i++)scanf("%c", &s[i]); 23 long long sum = n * (n + 1) / 2; 24 if (sum % 2 != 0) { puts("-1");continue; } 25 long long half = sum / 2; 26 for (int i = n;i >= 1;i--) { 27 if (half >= i) { 28 if (s[i] == '1')str[i] = 3; 29 else str[i] = 1; 30 half -= i; 31 if (half == 0)break; 32 } 33 else { 34 if (s[i] == '1')str[i] = 4; 35 else str[i] = 2; 36 } 37 } 38 for (int i = 1;i <= n;i++) { 39 if (str[i] == 0) { 40 if (s[i] == '1')str[i] = 4; 41 else str[i] = 2; 42 } 43 } 44 for (int i = 1;i <= n;i++)printf("%lld", str[i]); 45 printf("\n"); 46 } 47 return 0; 48 }
L - Doki Doki Literature Club ZOJ - 4035
1 #include<iostream> 2 #include<map> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #include<cmath> 7 #include<queue> 8 #include<cstdio> 9 #include<set> 10 #define inf 0x3f3f3f3f 11 const int maxn = 110; 12 using namespace std; 13 struct node { 14 string word; 15 long long int num; 16 }N[maxn]; 17 bool cmp(node a,node b) { 18 if (a.num != b.num)return a.num > b.num; 19 return a.word < b.word; 20 } 21 int main() { 22 ios::sync_with_stdio(false); 23 cin.tie(0); 24 cout.tie(0); 25 int T; 26 cin >> T; 27 while (T--) { 28 int n, m; 29 cin >> n >> m; 30 string word; 31 int num; 32 for (int i = 1;i <= n;i++) { 33 cin >> N[i].word >> N[i].num; 34 } 35 sort(N + 1, N + 1 + n, cmp); 36 long long ans = 0; 37 for (int i = 1;i <= m;i++) { 38 ans = ans + N[i].num * (m - i + 1); 39 } 40 cout << ans << " " ; 41 for (int i = 1;i <= m;i++) { 42 if (i == m)cout << N[i].word << endl; 43 else cout << N[i].word << " "; 44 } 45 } 46 return 0; 47 }
M - Lucky 7 ZOJ - 4036
1 #include<iostream> 2 #include<map> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 #include<cmath> 7 #include<queue> 8 #include<cstdio> 9 #define inf 0x3f3f3f3f 10 #define maxn 1010 11 using namespace std; 12 int main() { 13 int T; 14 scanf("%d", &T); 15 while (T--) { 16 int n, m,arr[maxn]; 17 scanf("%d%d", &n, &m); 18 int flag = 0; 19 for (int i = 1;i <= n;i++) { 20 scanf("%d", &arr[i]); 21 if ((arr[i] + m) % 7 == 0) { flag = 1; } 22 } 23 if (flag)puts("Yes"); 24 else puts("No"); 25 } 26 return 0; 27 }

浙公网安备 33010602011771号