Played giant difference. Topic links: https://codeforces.com/contest/1203
A:
Positive with over backwards to be again on the line.
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 int q; 21 int a[300]; 22 23 int main() { 24 scanf("%d", &q); 25 while (q--) { 26 int n; scanf("%d", &n); 27 int p, k; 28 rep1(i, 1, n) { 29 scanf("%d", &a[i]); 30 if (a[i] == 1) k = p = i; 31 } 32 if (n == 1) { 33 puts("YES"); 34 continue; 35 } 36 int flag1 = 1, flag2 = 1, last = a[k]; 37 while (1) { 38 p++; 39 if (p > n) p = 1; 40 if (a[p] - last != 1) { 41 flag1 = 0; break; 42 } 43 last = a[p]; 44 if (a[p] == n) break; 45 } 46 last = a[k]; p = k; 47 while (1) { 48 p--; 49 if (!p) p = n; 50 if (a[p] - last != 1) { 51 flag2 = 0; break; 52 } 53 last = a[p]; 54 if (a[p] == n) break; 55 } 56 if (flag1 || flag2) puts("YES"); else puts("NO"); 57 } 58 return 0; 59 }
B:
Because the area to be equal, apparently after ordering minimum matching the biggest stick, the second smallest matching the second largest, and so on.
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 const int maxn = 500; 21 int n, a[maxn], t; 22 23 int main() { 24 scanf("%d", &t); 25 while (t--) { 26 scanf("%d", &n); n = n * 4; 27 for (int i = 1; i <= n; i++) scanf("%d", &a[i]); 28 sort(a + 1, a + 1 + n); 29 int p = 1, q = n, area = -1, flag = 1; 30 while (p < q) { 31 if (area == -1) area = a[p] * a[q]; 32 else if (a[p]*a[q] != area) { 33 flag = 0; break; 34 } 35 if (a[p] != a[p + 1] || a[q] != a[q - 1]) { 36 flag = 0; break; 37 } 38 p += 2, q -= 2; 39 } 40 if (flag) puts("YES"); else puts("NO"); 41 } 42 return 0; 43 }
C:
Seeking again gcd, the answer is the number of gcd factor.
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 const int maxn = 4e5 + 10; 21 int a[maxn], n; 22 23 int main() { 24 scanf("%d", &n); 25 ll gcd = 1, k; scanf("%lld", &k); 26 gcd = k; 27 for (int i = 1; i < n; i++) { 28 ll x; scanf("%lld", &x); 29 gcd = __gcd(gcd, x); 30 } 31 if (gcd == 1) return puts("1"), 0; 32 int cnt = 0; 33 for (ll i = 1; i < sqrt(gcd); i++) 34 if (gcd % i == 0) cnt += 2; 35 ll tmp = sqrt(gcd); 36 if (tmp * tmp == gcd) cnt++; 37 printf("%d\n", cnt); 38 return 0; 39 }
D:
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 string s, t; 21 22 int main() { 23 cin >> s >> t; 24 int len1 = s.size(), len2 = t.size(); 25 vector<int>pre(len2), suf(len2); 26 int cur = 0; 27 // position front to back sweep pre stored string t of the letters in the string s occurs in 28 for ( int I = 0 ; CUR <LEN2; I ++ ) 29 IF (s [I] == t [ CUR]) 30 pre [CUR ++] = I; 31 is // position suf swept forward from the character string stored in the letter t appearing in the string s 32 CUR = LEN2; 33 is for ( int I = LEN1; I- - ;) { 34 is IF (S [I] == T [CUR - . 1 ]) 35 SUF [- CUR] = I; 36 } 37 [ //Pre array thus obtained is the index of the string t of each letter in the string s first appeared in 38 is // SUF array Similarly, to obtain the latest occurrence of the subscript 39 int ANS = max (LEN1 - . 1 - pre.back (), SUF [ 0 ]); 40 for ( int I = 0 ; I + . 1 <LEN2; I ++ ) 41 is ANS = max (ANS, SUF [I + . 1 ] - pre [I] - . 1 ) ; 42 is the printf ( " % D \ n- " , ANS); 43 is return 0 ; 44 is }
E:
Given the number n, each number x only becomes x-1, x + 1 or unchanged. After asking after several changes, the maximum number of different numbers can be selected.
greedy. Check after each sort and compared with the number value of a last. If the x-1> last, the ans ++, last = x-1. The remaining cases empathy.
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 /* namespace */ 17 using namespace std; 18 /* header end */ 19 20 int n, ans = 0; 21 vector<int>a; 22 23 int main() { 24 scanf("%d", &n); 25 for (int i = 1; i <= n; i++) { 26 int x; scanf("%d", &x); 27 a.pb(x); 28 } 29 sort(a.begin(), a.end()); 30 int last = 0; 31 for (auto i : a) { 32 if (i - 1 > last) ans++, last = i - 1; 33 else if (i - 1 == last) ans++, last = i; 34 else if (i == last) ans++, last = i + 1; 35 } 36 printf("%d\n", ans); 37 return 0; 38 }
F: