A.
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main() { int n; scanf ( "%d" ,&n); if (n<3) { printf ( "0 %d" ,n); return 0; } int tmp = n%7 , ans1 = (n/7)*2; if (tmp == 6) ++ans1; int ans2 = 2; n-=2; tmp = n%7; ans2 += (n/7)*2; if (tmp == 6) ++ans2; printf ( "%d %d\n" ,ans1,ans2); } |
B.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> inline int F() { register int aa , bb , ch; while (ch = getchar () , (ch< '0' ||ch> '9' ) && ch != '-' ); ch == '-' ? aa=bb=0 : (aa=ch- '0' ,bb=1); while (ch = getchar () , ch>= '0' &&ch<= '9' ) aa = aa*10 + ch- '0' ; return bb ? aa : -aa; } const int Maxn = 100005; int n , k , a[Maxn]; long long s = 0; int main() { n = F() , k = F(); for ( int i=1; i<=n; ++i) a[i] = F(); for ( int i=1; i<=n; ++i) { ++s; if (s >= k) { printf ( "%d\n" ,a[k]); return 0; } else k -= s; } } |
C.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <stdio.h> #include <algorithm> inline int F() { register int aa , bb , ch; while (ch = getchar () , (ch< '0' ||ch> '9' ) && ch != '-' ); ch == '-' ? aa=bb=0 : (aa=ch- '0' ,bb=1); while (ch = getchar () , ch>= '0' &&ch<= '9' ) aa = aa*10 + ch- '0' ; return bb ? aa : -aa; } const int Maxn = 200005; int n , m , cnt , a[Maxn] , b[Maxn] , s[Maxn] , c[Maxn] , d[Maxn] , ans = 1; int find( int x) { int l = 1 , r = cnt , mid; while (l <= r) { mid = (l + r) >> 1; if (b[mid] == x) return mid; if (b[mid] > x) r = mid - 1; else l = mid + 1; } return 0; } int main() { n = F(); for ( int i=1; i<=n; ++i) b[i] = a[i] = F(); std::sort(b+1,b+n+1); cnt = 1; for ( int i=2; i<=n; ++i) if (b[i] != b[cnt]) b[++cnt] = b[i]; for ( int i=1; i<=n; ++i) ++s[find(a[i])]; m = F(); for ( int i=1; i<=m; ++i) c[i] = s[find(F())]; for ( int i=1; i<=m; ++i) { d[i] = s[find(F())]; if (c[i] > c[ans] || (c[i] == c[ans] && d[i] > d[ans])) ans = i; } printf ( "%d\n" ,ans); } |
D2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> #define max(a,b) ((a) > (b) ? (a) : (b)) #define inf 2e9 inline int F() { register int aa , bb , ch; while (ch = getchar () , (ch< '0' ||ch> '9' ) && ch != '-' ); ch == '-' ? aa=bb=0 : (aa=ch- '0' ,bb=1); while (ch = getchar () , ch>= '0' &&ch<= '9' ) aa = aa*10 + ch- '0' ; return bb ? aa : -aa; } const int Maxn = 100010; int n , k , a[Maxn] , b[Maxn]; bool check(unsigned int x) { int tmp = k; for ( int i=1; i<=n; ++i) { long long used = 1ll * x * a[i] - b[i]; if (tmp >= used) { if (used >= 0) tmp -= used; } else return 0; } return 1; } int main() { n = F() , k = F(); for ( int i=1; i<=n; ++i) a[i] = F(); for ( int i=1; i<=n; ++i) b[i] = F(); unsigned int l = 0 , r = inf , mid , ans; while (l <= r) { mid = (l + r) >> 1; if (check(mid)) ans = mid , l = mid + 1; else r = mid - 1; } printf ( "%d\n" ,ans); } |
E.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <stdio.h> inline int F() { register int aa , bb , ch; while (ch = getchar () , (ch< '0' ||ch> '9' ) && ch != '-' ); ch == '-' ? aa=bb=0 : (aa=ch- '0' ,bb=1); while (ch = getchar () , ch>= '0' &&ch<= '9' ) aa = aa*10 + ch- '0' ; return bb ? aa : -aa; } const int Maxn = 500005; int n , m , p , ch , a[Maxn] , fal[Maxn] , far[Maxn]; int findl( int x) { return fal[x] == x ? x : fal[x] = findl(fal[x]); } int findr( int x) { return far[x] == x ? x : far[x] = findr(far[x]); } int main() { n = F() , m = F() , p = F(); for ( int i=1; i<=n; ++i) { fal[i] = far[i] = i; while (ch = getchar () , ch!= '(' && ch!= ')' ); if (ch == '(' ) a[i] = -1; else a[i] = 1; } far[n+1] = fal[n+1] = n+1; far[n+2] = fal[n+2] = n+2; while (m--) { while (ch = getchar () , ch!= 'L' && ch!= 'R' && ch!= 'D' ); if (ch == 'L' ) { p = findl(p-1); } if (ch == 'R' ) { p = findr(p+1); } if (ch == 'D' ) { if (a[p] == 1) { int now = 0; while (1) { now += a[p]; fal[p] = p-1; far[p] = p+1; if (now == 0) { if (findr(p) <= n) p = findr(p); else if (findl(p) >= 1) p = findl(p); else return 0; break ; }p = findl(p); } } else { int now = 0; while (1) { now += a[p]; fal[p] = p-1; far[p] = p+1; if (now == 0) { if (findr(p) <= n) p = findr(p); else if (findl(p) >= 1) p = findl(p); else return 0; break ; }p = findr(p); } } } } int now = 1; while (now <= n) { int x = findr(now); if (x <= n) { if (a[x] == -1) putchar ( '(' ); else putchar ( ')' ); } now = x+1; } } |
F.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #include <stdio.h> #include <string> #include <string.h> #include <iostream> using namespace std; const int Maxn = 1000005; int n , len , cnt[100] , ch; char s[Maxn]; string s1 , s2 , s3; void Init() { while (ch = getchar () , ch < '0' || ch > '9' ); ++cnt[ch- '0' ]; n = 1; while (ch = getchar () ,ch >= '0' && ch <= '9' ) ++cnt[ch- '0' ] , ++n ; scanf ( "%s" ,s+1); } int bit( int x){ int ans = 0; while (x) x/=10 , ++ans; return ans; } void getlen() { int len = n; while (bit(len) != n-len) --len; int tmp = n = len; while (tmp) --cnt[tmp%10] , tmp/=10; len = strlen (s+1); for ( int i=1; i<=len; ++i) { --cnt[s[i]- '0' ]; --n; } } int main() { Init(); getlen(); if (n == 0) { printf ( "%s" ,s+1); } else if (s[1] == '0' ) { int flag; for ( int i=1; i<=9; ++i) { if (cnt[i]) { flag = i; break ; } } printf ( "%d" ,flag); --cnt[flag]; while (cnt[0]--) printf ( "0" ); printf ( "%s" ,s+1); for ( int i=1; i<=9; ++i) while (cnt[i]--) printf ( "%d" ,i); } else { int flag = 0; for ( int i=1; i<=9; ++i) { if (cnt[i]) { flag = i; break ; } } if (!flag) { printf ( "%s" ,s+1); while (cnt[0]--) printf ( "0" ); return 0; } else if (flag > s[1]- '0' ) { printf ( "%s" ,s+1); for ( int i=0; i<=9; ++i) while (cnt[i]--) printf ( "%d" ,i); } else { s1 += s+1; for ( int i=0; i<=9; ++i) { int tmp = cnt[i]; while (tmp--) s1 += i+ '0' ; } s2 += flag+ '0' ; s3 += flag+ '0' ; --cnt[flag]; for ( int i=0; i<s[1]- '0' ; ++i) { while (cnt[i]--) { s2 += i+ '0' ; s3 += i+ '0' ; } } s2 += s+1; while (cnt[s[1]- '0' ]--) { s2 += s[1]; s3 += s[1]; } s3 += s+1; for ( int i=s[1]- '0' +1; i<10; ++i) { while (cnt[i]--) { s2 += i+ '0' ; s3 += i+ '0' ; } } if (s1 > s2) { if (s2 > s3) cout<<s3; else cout<<s2; } else { if (s1 > s3) cout<<s3; else cout<<s1; } } } } |