Codeforces Beta Round #1
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-10 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 150000 + 5; const int mod = 998244353; int main() { LL n,m,a; cin >> n >> m >> a; n = LL(ceil(n * 1.0 / a)); m = LL(ceil(m * 1.0 / a)); printf("%lld ",n * m); }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-10 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e6 + 5; const int mod = 998244353; bool is(char a) { if('A' <= a && a <= 'Z') return true; return false; } int check(char *s) { int len = strlen(s); int ans = 0,pos1 = -1,pos2 = -1; for(int i = 0 ;i < len; i++) { if(is(s[i]) && s[i] != 'R' && s[i] != 'C') { ans++; continue; } if(s[i] == 'R') { ans ++; pos1 = i; } if(s[i] == 'C') { ans++; pos2 = i; } } if(ans == 2 && pos1 != -1 && pos2 != -1 && pos2 - pos1 > 1) return 1; return 2; } void K(int n) { if(n>26) K((n-1)/26); printf("%c",(n-1)%26+'A'); } int main() { int n; cin >> n; while(n--) { char s[MAXN]; scanf("%s",s); int flag = check(s); //debug(flag); if(flag == 1) { int len = strlen(s); int pos1 = -1,pos2 = -1; for(int i = 0 ;i < len; i++) { if(s[i] == 'R') { pos1 = i; } if(s[i] == 'C') { pos2 = i; } } int p1 = 0,p2 = 0; for(int i = pos1 + 1; i < pos2; i++) { p1 *= 10; p1 += (s[i] - '0'); } for(int i = pos2 + 1; i < len; i++) { p2 *= 10; p2 += (s[i] - '0'); } char ch = 'A'; K(p2); printf("%d ",p1); } else { int p1 = 0,p2 = 0; int len = strlen(s); int i; for(i = 0; i < len; i++) { if(is(s[i])) { p1 *= 26; p1 += s[i] - 'A' + 1; } else break; } for(i ; i < len ; i++) { p2 *= 10; p2 += s[i] - '0'; } printf("R%dC%d ",p2,p1); } } }
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e6 + 5; const int mod = 998244353; struct node{ double x,y; }; double len(node a,node b) { double tmp = sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)); return tmp; } double gcd(double x,double y) { while(fabs(x) > eps && fabs(y) > eps) { if(x > y) x -= floor(x / y) * y; else y -= floor(y / x) * x; } return x + y; } int main() { node a,b,c; cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y; double lena = len(a,b); double lenb = len(b,c); double lenc = len(a,c); double p = (lena + lenb + lenc) / 2.0; double S = sqrt(p * (p - lena) * (p - lenb) * (p - lenc)); double R = lena * lenb * lenc / (4.0 * S); double A = acos((lenb * lenb + lenc * lenc - lena * lena) / (2 * lenb * lenc)); double B = acos((lena * lena + lenc * lenc - lenb * lenb) / (2 * lena * lenc)); double C = acos((lena * lena + lenb * lenb - lenc * lenc) / (2 * lena * lenb)); double PI = acos(-1.0); double n = PI / gcd(gcd(A,B),C); double ans = n / 2 * R * R * sin(2 * PI / n); printf("%.10f ",ans); }
Codeforces Beta Round #2
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e3 + 5; const int mod = 998244353; map<string,int>mp; map<string,int>vis; int main() { int t; cin >> t; string s[MAXN]; int c[MAXN]; int maxx = -INF; string ans; for(int i = 0; i < t; i++) { cin >> s[i]; scanf("%d",&c[i]); mp[s[i]] += c[i]; } map<string,int> :: iterator it; for(it = mp.begin(); it != mp.end(); it ++) { maxx = max(maxx,it -> second); } for(it = mp.begin(); it != mp.end(); it ++) { if(it -> second == maxx) { vis[it->first] = 1; } } mp.clear(); for(int i = 0; i < t; i++) { mp[s[i]] += c[i]; if(mp[s[i]] >= maxx && vis[s[i]] == 1) { ans = s[i]; break; } } cout << ans << endl; }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e3 + 5; const int mod = 998244353; int read(){ int ans=0,flag=1;char ch; while((ch=getchar())<'0'||ch>'9') if(ch=='-') flag=-1; ans=ch^48; while((ch=getchar())>='0'&&ch<='9') ans=(ans<<3)+(ans<<1)+(ch^48); return flag*ans; } int f[MAXN][MAXN][2]; int g[MAXN][MAXN][2]; void dfs(int x,int y,int k) { if(x == 1 && y == 1) return; if(g[x][y][k]) { dfs(x - 1,y,k); putchar('D'); } else { dfs(x, y - 1,k); putchar('R'); } } int main() { int n,x = 0,k; n = read(); memset(f,0,sizeof f); for(int i = 2; i <= n; i++) for(int id = 0; id < 2; id++) f[0][i][id] = f[i][0][id] = INF; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { k = read(); if (k == 0) { x = i; } else { while (k % 2 == 0) { f[i][j][0]++; k /= 2; } while (k % 5 == 0) { f[i][j][1]++; k /= 5; } } for (int id = 0; id < 2; id++) { if (f[i - 1][j][id] < f[i][j - 1][id]) { g[i][j][id] = 1; f[i][j][id] += f[i - 1][j][id]; } else { g[i][j][id] = 0; f[i][j][id] += f[i][j - 1][id]; } // if(g[i][j][id]=f[i-1][j][id]<f[i][j-1][id]) // f[i][j][id] += f[i-1][j][id]; // else // f[i][j][id] += f[i][j-1][id]; } } } if(f[n][n][1] < f[n][n][0]) k = 1; else k = 0; if(x && f[n][n][1] > 1) { printf("1 "); for(int i = 2; i <= x; i++) putchar('D'); for(int i = 2; i <= n; i++) putchar('R'); for(int i = x + 1; i <= n; i++) putchar('D'); } else { printf("%d ",f[n][n][k]); dfs(n,n,k); } return 0; }
C.
好像是啥模拟退火,先留坑
Codeforces Beta Round #3
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; int main() { char st[10]; char en[10]; cin >> st >> en; int a1 = st[0] - 'a'; int a2 = st[1] - '0'; int b1 = en[0] - 'a'; int b2 = en[1] - '0'; int dx = a1 - b1; int dy = a2 - b2; // cout << dx << dy << endl; int ans = max(abs(dx),abs(dy)); printf("%d ",ans); for(int i = 0;i < ans; i++) { if(i < abs(dx) && dx < 0) putchar('R'); if(i < abs(dx) && dx > 0) putchar('L'); if(i < abs(dy) && dy < 0) putchar('U'); if(i < abs(dy) && dy > 0) putchar('D'); cout << endl; } }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; struct node{ int id,val,kind; }a[MAXN]; bool cmp(node a,node b) { if(a.kind != b.kind) return a.kind > b.kind; return a.val > b.val; } int main() { int n, v; cin >> n >> v; for (int i = 1; i <= n; i++) { scanf("%d %d", &a[i].kind, &a[i].val); a[i].id = i; } sort(a + 1, a + 1 + n, cmp); deque<node> que; int sum = 0; int i; for (i = 1; i <= n; i++) { if (v == 0) break; if (v >= 2 && a[i].kind == 2) { node tmp; tmp = a[i]; que.push_front(tmp); v -= 2; sum += a[i].val; } if (v >= 1 && a[i].kind == 1) { node tmp; tmp = a[i]; que.push_back(tmp); v -= 1; sum += a[i].val; } } for(i ; i <= n; i++) if(a[i].kind == 1) break; if (i <= n) { for (i; i <= n; i++) { node tmp = que.front(); if (tmp.kind == 2 && tmp.val < (a[i].val + a[i + 1].val)) { que.pop_front(); que.push_back(a[i]); que.push_back(a[i + 1]); sum -= tmp.val; sum += (a[i].val + a[i + 1].val); i++; } } } int num[MAXN]; int pos = 0; while(que.size()) { node tmp = que.front(); que.pop_front(); num[pos++] = tmp.id; } sort(num,num + pos); cout << sum << endl; for(int i = 0 ; i < pos; i++) printf("%d ",num[i]); }
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; char s[10][10]; bool ill() { int a = 0; int b = 0; for(int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (s[i][j] == 'X') a++; if (s[i][j] == '0') b++; } } int tmp = a - b; if(tmp == 0 || tmp == 1) return true; return false; } int de() { int a = 0; int b = 0; for(int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (s[i][j] == 'X') a++; if (s[i][j] == '0') b++; } } int tmp = a - b; return tmp; } bool firstwin() { for(int i = 0 ; i < 3; i ++ ) { if (s[i][0] == s[i][1] && s[i][1] == s[i][2] && s[i][2] == 'X') { return true; } } for(int i = 0; i < 3; i++) { if(s[0][i] == s[1][i] && s[1][i] == s[2][i] && s[0][i] == 'X') return true; } if(s[0][0] == s[1][1] && s[1][1] == s[2][2] && s[0][0] == 'X') return true; if(s[2][0] == s[1][1] && s[1][1] == s[0][2] && s[1][1] == 'X') return true; return false; } bool secondwin() { for(int i = 0 ; i < 3; i ++ ) { if (s[i][0] == s[i][1] && s[i][1] == s[i][2] && s[i][2] == '0') { return true; } } for(int i = 0; i < 3; i++) { if(s[0][i] == s[1][i] && s[1][i] == s[2][i] && s[0][i] == '0') return true; } if(s[0][0] == s[1][1] && s[1][1] == s[2][2] && s[0][0] == '0') return true; if(s[2][0] == s[1][1] && s[1][1] == s[0][2] && s[1][1] == '0') return true; return false; } bool man() { int ans = 0; for(int i = 0; i < 3; i++) for(int j = 0 ;j < 3; j++) if(s[i][j] != '.') ans ++; return ans == 9; } int main() { for(int i = 0 ;i < 3; i++) cin >> s[i]; if(ill() == false || (firstwin() && secondwin())) { puts("illegal"); return 0; } if(secondwin() && de() == 1) { puts("illegal"); return 0; } if(firstwin() && de() == 0) { puts("illegal"); return 0; } if(firstwin()) { puts("the first player won"); return 0; } if(secondwin()) { puts("the second player won"); return 0; } if(man()) { puts("draw"); return 0; } if(de() == 0) { puts("first"); return 0; } if(de() == 1) { puts("second"); return 0; } }
D.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; struct node{ int s,pos; node(){} node(int xx,int pp): s(xx),pos(pp){} bool operator < (node a)const { return s > a.s; //s小的优先级高 } }; priority_queue<node>que; int main() { char s[MAXN]; scanf("%s",s); int len = strlen(s); LL ans = 0; int flag = 0; int wrong = 0; for(int i = 0 ; i < len; i++) { if(s[i] == '(') flag++; else if(s[i] == ')') flag--; else { int a,b; scanf("%d %d",&a,&b); flag--; ans += 1LL * b; que.push(node(a - b,i)); s[i] = ')'; } if(flag < 0) { if(que.empty()) { wrong = 1; } else { flag += 2; node tmp = que.top(); que.pop(); ans += tmp.s; s[tmp.pos] = '('; } } } // debug(flag); if(wrong || flag != 0) puts("-1"); else { cout << ans << endl; printf("%s",s); } }
Codeforces Beta Round #4(Div. 2 Only)
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; int main() { int w; cin >> w; if(w % 2 == 1 || w == 2) puts("NO"); else puts("YES"); }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 234 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; int main() { int d,sum; cin >> d >> sum; int minn = 0; int maxx = 0; int a[MAXN]; int b[MAXN]; for(int i = 0;i < d; i++) { cin >> a[i] >> b[i]; minn += a[i]; maxx += b[i]; } if(minn <= sum && sum <= maxx) { puts("YES"); int tmp = sum - minn; for(int i = 0; i < d; i++) { if(b[i] > a[i] && tmp > 0) { int xx = min(b[i] - a[i],tmp); tmp -= xx; a[i] += xx; } printf("%d ",a[i]); } } else { puts("NO"); } }
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 234 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; map<string,int>mp; int main() { int t; cin >> t; while(t--) { string s; cin >> s; if(mp[s] == 0) { mp[s] ++; cout << "OK" <<endl; } else { cout <<s << mp[s] <<endl; mp[s]++; } } }
D.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl #define ll long long #define LL long long const int MAXN = 1e5 + 5; const int mod = 998244353; struct node{ int w,h; int id; }a[MAXN]; bool cmp(node a,node b) { if(a.w != b.w) return a.w < b.w; return a.h < b.h; } int dp[MAXN]; int path[MAXN]; void print(int n) { if(path[n] == -1) { printf("%d ",a[n].id); return ; } else { print(path[n]); printf("%d ",a[n].id); } } int main() { int n, w, h; cin >> n >> w >> h; int pos = 0; for(int i = 1; i <= n; i++) { int w1,h1; cin >> w1 >> h1; if(w1 > w && h1 > h) { a[pos].w = w1; a[pos].h = h1; a[pos].id = i; pos++; } } if(pos == 0) { cout << 0 << endl; return 0; } sort(a, a + pos, cmp); for(int i = 0; i < pos; i++) { dp[i] = 1; path[i] = i; } memset(path, -1, sizeof path); int maxlen = 1,biao = 0; for(int i = 0; i < pos; i++) { for(int j = 0; j < i; j++) { if(a[j].h < a[i].h && a[j].w < a[i].w && dp[i] < (dp[j] + 1)) { dp[i] = dp[j] + 1; if(dp[i] > maxlen) maxlen = dp[i]; path[i] = j; } } } int tmp,cmp = 0; for(int i = 0; i < n; i++) { if(dp[i] > cmp) { cmp = dp[i]; tmp = i; } } cout << maxlen << endl; // debug(tmp); print(tmp); }
Codeforces Beta Round #5
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int mod = 998244353; int main() { char a[MAXN]; int num = 0; int sum = 0; while(gets(a)) { if(a[0] == '+') num++; else if(a[0] == '-') num--; else { int pos; for(int i = 0; i < strlen(a); i++) if(a[i] == ':') { pos = i; break; } sum += (strlen(a) - 1 - pos) * num; } } cout << sum << endl; }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e3 + 5; const int mod = 998244353; string s[maxn]; int main() { int n = 0; int len = 0; while (getline(cin,s[n])) { len = max(len,(int)s[n].size()); n++; } for(int i = 0; i < len + 2; i++) putchar('*'); cout << endl; bool flag = true; for(int i = 0; i < n; i++) { putchar('*'); int tmp = len - s[i].size(); int k1 = tmp / 2,k2 = tmp / 2; if(tmp % 2 != 0) { if(flag == false) { k1 ++; flag = true; } else { k2 ++; flag = false; } } for(int j = 0; j < k1; j++) putchar(' '); cout << s[i]; for(int j = 0; j < k2; j++) putchar(' '); putchar('*'); cout << endl; } for(int i = 0; i < len + 2; i++) putchar('*'); } /* ************ * This is * * * *Codeforces* * Beta * * Round * * 5 * ************ */
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e6 + 5; const int mod = 998244353; int f[maxn]; char a[maxn]; int maxlen,num,n; stack<int>s; void init() { memset(f,0,sizeof f); maxlen = 0; num = 1; } int main() { init(); scanf("%s",a); n = strlen(a); for(int i = 0 ; i < n; i++) { if(a[i] == '(') s.push(i); else { if(!s.empty()) { int t = s.top(); s.pop(); f[i] = f[t - 1] + i - (t - 1); } if(f[i] > maxlen) { maxlen = f[i]; num = 1; } else if(f[i] == maxlen) num++; } } if(maxlen) printf("%d %d ",maxlen,num); else printf("0 1 "); }
D.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e6 + 5; const int mod = 998244353; int main() { double a,v,l,d,w; cin >> a >> v >> l >> d >> w; double t1,t2,vv,vd; if(v <= w) { if(2.0 * d * a <= v * v) { t1 = sqrt(2.0 * d / a); vd = sqrt(2.0 * d * a); } else { t1 = v / a + (d - v * v * 0.5 / a) / v; vd = v; } } else if(2.0 * d * a <= w * w) { t1 = sqrt(2.0 * d / a); vd = sqrt(2.0 * d * a); } else { vv = sqrt(a * d + 0.5 * w * w); if(v >= vv && vv >= w) t1 = (2.0 * vv - w) / a; else { t1 = v / a; t1 += (d - (v * v - 0.5 * w * w) / a) / v; t1 += (v - w) / a; } vd = w; } if(2.0 * a * (l - d) < v * v - vd * vd) { t2 = (sqrt(2.0 * a * (l - d) + vd * vd) - vd) / a; } else { t2 = (v - vd) / a; t2 += ((l - d) - 0.5 * (v * v / a - vd * vd / a)) / v; } printf("%.10f ",t1 + t2); }
E.
https://blog.csdn.net/qq_38759433/article/details/86514227

include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e6 + 5; const int mod = 998244353; LL h[maxn],hh[maxn],same[maxn],l[maxn],r[maxn]; int main() { LL n,maxh,pos; scanf("%lld",&n); for(LL i = 0; i < n; ++i) scanf("%lld",&h[i]); maxh = h[0],pos = 0; for(LL i = 1; i < n; ++i) { if(h[i] > maxh) { maxh = h[i]; pos = i; } } for(LL i = 0; i < n; ++i) { hh[i] = h[(pos + i) % n]; } hh[n] = hh[0]; same[n] = 0; for(LL i = n - 1; i >= 0; --i) { r[i] = i + 1; while(r[i] < n && hh[i] > hh[r[i]]) r[i] = r[r[i]]; if(r[i] < n && hh[i] == hh[r[i]]) { same[i] = same[r[i]] + 1; r[i] = r[r[i]]; } } l[0] = 0; for(LL i = 1; i <= n; ++i) { l[i] = i - 1; while(l[i] > 0 && hh[i] >= hh[l[i]]) l[i] = l[l[i]]; } LL ans = 0; for(LL i = 0; i < n; ++i) { ans += same[i]; if(hh[i] < hh[0]) { if(l[i] == 0 && r[i] == n) ans++; else ans += 2; } } cout << ans << endl; }
Codeforces Beta Round #6 (Div. 2 Only)
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e5 + 5; const int mod = 998244353; int a[10]; int main() { for(int i = 0; i < 4; i++) cin >> a[i]; sort(a, a + 4); if(a[2] < (a[0] + a[1]) || a[3] < (a[2] + a[1])) puts("TRIANGLE"); else if(a[2] == (a[0] + a[1]) || a[3] == (a[0] + a[1]) || a[3] == (a[2] + a[1])) puts("SEGMENT"); else puts("IMPOSSIBLE"); }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e2 + 5; const int mod = 998244353; char s[maxn][maxn]; set<char>se; int dx[4] = {1,-1,0,0}; int dy[4] = {0,0,1,-1}; int main() { int n, m; char ch; cin >> n >> m >> ch; for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (s[i][j] == ch) { for (int k = 0; k < 4; k++) { int nx = i + dx[k]; int ny = j + dy[k]; if(1 <= nx && nx <= n && 1 <= ny && ny <= m && s[nx][ny] != '.' && s[nx][ny] != ch) { // cout << s[nx][ny] << endl; se.insert(s[nx][ny]); } } } } } cout << se.size() << endl; }
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e5 + 5; const int mod = 998244353; deque<int>que; int main() { int n; cin >> n; int t[maxn]; for(int i = 1; i <= n; i++) { cin >> t[i]; } int st = 1, en = n; int cnta = 0,cntb = 0; int aa = 0,bb = 0; while(st <= en) { if(aa <= bb) { aa += t[st++]; cnta++; } else { bb += t[en--]; cntb++; } } printf("%d %d ",cnta,cntb); }
D.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e5 + 5; const int mod = 998244353; int n,a,b; int h[maxn]; vector<int>tmp; vector<int>v; int ans = inf; void dfs(int x,int times) { if(times >= ans) return; if(x == n) { if(h[x] < 0) { v = tmp; ans = times; } return; } for(int i = 0; i <= max(h[x - 1] / b + 1,max(h[x] / a + 1,h[x + 1] / b + 1)); i++) { if(h[x - 1] < b * i) { h[x - 1] -= b * i; h[x] -= a * i; h[x + 1] -= b * i; for (int j = 0; j < i; j++) tmp.push_back(x); dfs(x + 1, times + i); for (int j = 0; j < i; j++) tmp.pop_back(); h[x - 1] += b * i; h[x] += a * i; h[x + 1] += b * i; } } } int main() { cin >> n >> a >> b; for(int i = 1; i <= n; i++) cin >> h[i]; dfs(2,0); cout << ans << endl; for(int i = 0; i < v.size(); i++) printf("%d ",v[i]); }
E.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e5 + 5; const int mod = 998244353; int n,k; int a[maxn]; int ma[maxn << 2],mi[maxn << 2]; void build(int o,int l,int r) { if(l == r) { ma[o] = a[l]; mi[o] = a[l]; } else { int mid = (l + r) >> 1; build(o << 1,l ,mid); build(o << 1 | 1,mid + 1,r); ma[o] = max(ma[o << 1],ma[o << 1 | 1]); mi[o] = min(mi[o << 1],mi[o << 1 | 1]); } } int querymax(int o,int l,int r,int ql,int qr) { if(ql > r || qr < l) return -1; if(ql <= l && qr >= r) return ma[o]; int mid = (l + r) >> 1; int p1 = querymax(o << 1 ,l, mid,ql,qr); int p2 = querymax(o << 1 | 1,mid + 1, r, ql,qr); return max(p1,p2); } int querymin(int o,int l,int r,int ql,int qr) { if(ql > r || qr < l) return inf; if(ql <= l && qr >= r) return mi[o]; int mid = (l + r) >> 1; int p1 = querymin(o << 1 ,l, mid,ql,qr); int p2 = querymin(o << 1 | 1,mid + 1, r, ql,qr); return min(p1,p2); } pair<int,int>p[maxn]; int main() { cin >> n >> k; for(int i = 1; i<= n; i++) cin >> a[i]; build(1,1,n); int l ,r, tmp, cnt; l = r = tmp = 1; cnt = 0; while(l <= n) { int fx = querymax(1,1,n,l,r); int fy = querymin(1,1,n,l,r); if(fx - fy <= k) { if(r - l + 1 == tmp) { p[cnt].first = l; p[cnt].second = r; cnt ++; } else if(r - l + 1 > tmp) { cnt = 0; tmp = r - l + 1; p[cnt].first = l; p[cnt].second = r; cnt++; } r++; } else l++; if(r > n) { r = n;l++; } if(l > r) r = l; } printf("%d %d ",tmp,cnt); for(int i = 0; i < cnt; i++) printf("%d %d ",p[i].first,p[i].second); }
Codeforces Round #579 (Div. 3)
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-10 typedef long long LL; const int MAXN = 32000 + 5; const int mod = 998244353; int a[MAXN]; int main() { int t; cin >> t; while(t--) { int n; cin >> n; int pos; for(int i = 1; i <= n; i++) { cin >> a[i]; if(a[i] == 1) pos = i; } for(int i = n + 1; i <= 2 * n; i++) a[i] = a[i - n]; int flag = 0; int cnt = 1; int ans = 0; for(int i = pos; i < pos + n; i++) { if(a[i] == cnt){ ans++; cnt++; } } if(ans == n) flag =1; ans = 0; cnt =1; for(int i = pos + n; i > pos; i--) { if(a[i] == cnt) { ans++; cnt++; } } if(ans == n) flag =1; if(flag) puts("YES"); else puts("NO"); } }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-10 typedef long long LL; const int MAXN = 1e4 + 5; const int mod = 998244353; int a[MAXN]; int main() { int t; cin >> t; while(t--) { memset(a,0,sizeof a); int n,x; cin >> n; for(int i = 1; i <= 4 * n; i++) cin >> a[i]; sort(a + 1,a + 4 * n + 1); LL ans = a[1] * a[4 * n]; int flag = 1; for(int i = 2;i <= 2 * n; i++) { if(i % 2 == 0 && a[i] != a[i - 1]) flag = 0; if (a[i] * a[4 * n + 1 - i] != ans) flag = 0; } if(flag) puts("YES"); else puts("NO"); } }
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-10 typedef long long LL; const int MAXN = 150000 + 5; const int mod = 998244353; LL gcd(LL a,LL b) { return b == 0 ? a : gcd(b,a % b); } LL num(LL x){ if(x == 1) return 1; LL ans = 0; LL tmp = LL(sqrt(x * 1.0)); if(tmp * tmp == x) ans++; if(ans == 0) { for (int i = 1; i <= LL(sqrt(x * 1.0)); i++) { if (x % i == 0) ans += 2; } } else { for (int i = 1; i < LL(sqrt(x * 1.0)); i++) { if (x % i == 0) ans += 2; } } return ans; } int main() { int n; cin >> n; LL x,y; scanf("%lld",&x); for(int i = 1; i < n; i++) { scanf("%lld",&y); if(x != 1) x = gcd(x,y); } printf("%lld ",num(x)); }
D1 && D2.

#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<list> #include<math.h> #include<vector> #include<stack> #include<string> #include<cstring> #include<string.h> using namespace std; typedef long long LL; #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl const int MAXN = 2e5 + 10; const double eps = 1e-8; char a[MAXN],b[MAXN]; int c1[MAXN],c2[MAXN]; int main() { scanf("%s %s",a + 1,b + 1); int lena = strlen(a + 1); int lenb = strlen(b + 1); int max_len = 0; int j = 1,i; for(i = 1; i <= lena; i++) { if(a[i] == b[j]) { c1[j] = i; j++; if(j == lenb + 1) break; continue; } } max_len = max(max_len, lena - i); j = lenb; for(i = lena; i >= 1; i--) { if(a[i] == b[j]) { c2[j] = i; j--; if(j == 0) break; continue; } } max_len = max(max_len,i - 1); for( i = 2; i <= lenb; i++) { max_len = max(max_len,c2[i] - c1[i - 1] - 1); } cout << max_len << endl; }
E.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-10 typedef long long LL; const int MAXN = 150000 + 5; const int mod = 998244353; int main() { int vis[MAXN]; int a[MAXN]; int n; cin >> n; for(int i = 0; i < n; i++) scanf("%d",&a[i]); sort(a,a + n); memset(vis,0,sizeof vis); int ans = 0; int tmp1,tmp2,tmp3; for(int i = 0; i < n; i++) { tmp1 = a[i] - 1; tmp2 = a[i]; tmp3 = a[i] + 1; if(tmp1 > 0 && vis[tmp1] == 0) { ans++; vis[tmp1] = 1; continue; } if(tmp2 > 0 && vis[tmp2] == 0) { ans++; vis[tmp2] = 1; continue; } if(tmp3 > 0 && vis[tmp3] == 0) { ans++; vis[tmp3] = 1; continue; } } cout << ans <<endl; }
F1.
F2.
Codeforces Round #580 (Div. 2)
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e3 + 5; const int mod = 998244353; map<int,int>mpa; map<int,int>mpb; int a[MAXN],b[MAXN]; int main() { int n; cin >> n;; for(int i = 0; i < n; i++) { cin >> a[i]; mpa[a[i]] = 1; } int m; cin >> m; for(int i = 0; i < m; i++) { cin >> b[i]; mpb[b[i]] = 1; } for(int i = 0; i < n; i++) { for(int j = 0 ; j < m; j++) { int t = a[i] + b[j]; if(mpa[t] == 0 && mpb[t] == 0) { printf("%d %d ",a[i],b[j]); return 0; } } } }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e5 + 5; const int mod = 998244353; int a[MAXN]; int main() { int n; cin >> n; int num0 = 0; LL sum = 0; for(int i = 0 ; i < n; i++) { cin >> a[i]; if(a[i] > 1) { sum += (a[i] - 1); a[i] = 1; } if(a[i] < -1) { sum += (-1 - a[i]); a[i] = -1; } if(a[i] == 0) num0 ++; } int ji = 1; for(int i = 0; i < n; i++) { if(a[i] != 0) ji *= a[i]; } if(num0 > 0) { printf("%lld ",sum + num0); } else { if(ji == 1) printf("%lld ",sum); else printf("%lld ",sum + 2LL); } }
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int mod = 998244353; int a[MAXN]; int main() { int n; cin >> n; if(n % 2 == 0) { printf("NO "); } else { int num = 1; for(int i = 1; i <= n; i++) { if(i % 2 == 1) { a[i] = num++; a[i + n] = num++; } else { a[i + n] = num++; a[i] = num++; } } puts("YES"); for(int i = 1; i <= 2 * n; i++) printf("%d%c",a[i],i == 2 * n ? ' ' : ' '); } }
D.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e3 + 5; const int mod = 998244353; LL a[MAXN]; vector<int>v[MAXN]; int mp[MAXN][MAXN]; int g[MAXN][MAXN]; int floyd(int n) { int res = MAXN; for (int k = 1; k <= n; k++) { for (int i = 1; i < k; i++) for (int j = i + 1; j < k; j++) res = min(res, g[i][j] + mp[i][k] + mp[k][j]); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) g[i][j] = g[j][i] = min(g[i][j], g[i][k] + g[k][j]); } return res; } int main() { int n; cin >> n; int num = 1; for (int i = 0; i < n; i++) { LL x; cin >> x; if (x != 0 && num < 200) { a[num++] = x; } } if (num > 128) printf("3 "); else { // debug(num); num--; for (int i = 1; i <= num; i++) for (int j = 1; j <= num; j++) if (i != j) mp[i][j] = g[i][j] = MAXN; for (int i = 1; i <= num; i++) { for (int j = i + 1; j <= num; j++) { if ((a[i] & a[j]) != 0) { mp[i][j] = 1; mp[j][i] = 1; g[i][j] = g[j][i] = 1; // printf("%d %d ", i, j); } } } int ans = floyd(num); if(ans == MAXN) cout << -1 << endl; else cout << ans << endl; } }
E.
留坑
F.
留坑
Codeforces Round #581 (Div. 2)
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e3 + 5; const int mod = 998244353; int main() { char s[MAXN]; scanf("%s",s); int len = strlen(s); int ans =0 ; for(int i = 1; i < len; i++) if(s[i] == '1') ans++; char a[MAXN]; for(int i = 0; i < len; i++) a[i] = s[len - 1 - i]; // cout << a << endl; int tmp = 0; for(int i = 0; i < len; i++) { if(i % 2 == 0) tmp += 1; } if(ans == 0 && len % 2 == 1) tmp --; cout << tmp << endl; }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e3 + 5; const int mod = 998244353; int main() { int n,l,r; cin >> n >> l >> r; LL minn = n - l + 1; LL num = 2; for(int i = 0; i < l - 1; i++) { minn += num; num *= 2; } LL maxx = 1; num = 2; for(int i = 0; i < r - 1; i++) { maxx += num; num *= 2; } num /= 2; maxx += (n - r) * num; printf("%lld %lld ",minn,maxx); }
C.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 1e2 + 5; const int mod = 998244353; char s[MAXN][MAXN]; int mp[MAXN][MAXN]; const int N = 1e6 + 10; struct node{ int v,k; }stk[N]; int n; void floyd() { for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]); } int x[N]; int main() { cin >> n; for(int i = 1; i <= n; i++) scanf("%s",s[i] + 1); for(int i = 1;i <= n; i++) { for(int j =1; j <= n; j++) { if(s[i][j] == '1') mp[i][j] = 1; else if(i == j) mp[i][j] = 0; else mp[i][j] = INF; } } floyd(); int m; cin >> m; for(int i = 0; i < m; i++) { scanf("%d",&x[i]); } int top = 0; stk[top++] = {x[0],0}; stk[top++] = {x[1],1}; for(int i =2; i < m; i++) { while(mp[stk[top - 2].v][x[i]] == i - stk[top - 2].k) --top; stk[top++] = node{x[i],i}; } cout << top << endl; printf("%d",stk[0].v); for(int i = 1; i < top; i++) printf(" %d",stk[i].v); cout << endl; }
D1 && D2.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int MAXN = 2e5 + 5; const int maxn = 2e5 + 10; const int mod = 998244353; char a[MAXN]; int main() { scanf("%s",a + 1); int len = strlen(a + 1); int cnt = 0; for(int i = len; i >= 1; i--) { if(a[i] == '0') cnt++; else { if(cnt == 0) a[i] = '0'; else cnt --; } } printf("%s",a + 1); }
E. ********

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 2e3 + 5; const int mod = 998244853; int C[maxn * 2][maxn * 2], dp[maxn][maxn], g[maxn][maxn]; int n, m; int main() { cin >> n >> m; for(int i = 0; i <= n + m; ++i) { C[i][0] = 1; for(int j = 1; j <= i; ++j) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod; } for(int i = 1; i <= m; ++i) g[0][i] = 1; for(int i = 1; i <= n; ++i) { for(int j = i; j <= m; ++j) g[i][j] = (g[i - 1][j] + g[i][j - 1]) % mod; } for(int i = 1; i <= n; ++i) { dp[i][0] = i; for(int j = 1; j <= m ; ++j) { dp[i][j] = (C[i + j - 1][j] + dp[i - 1][j]) % mod; dp[i][j] = (dp[i][j] + dp[i][j - 1]) % mod; dp[i][j] = (dp[i][j] + (g[i][j - 1] - C[i + j - 1][i] + mod) % mod) % mod; } } printf("%d ",dp[n][m]); }
Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
A.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 1e5 + 5; const int mod = 998244353; int f[maxn]; int main() { int t; cin >> t; while (t--) { int a,b,n; cin >> a >> b >> n; int tmp = a xor b; if(n % 3 == 0) cout << a << endl; else if(n % 3 == 1) cout << b << endl; else cout << tmp << endl; } }
B.

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 2e3 + 5; const int mod = 998244353; int a[maxn]; map<int,int>mp; int main() { int n; cin >> n; for(int i = 0; i < n; i++) cin >> a[i]; int ans = 0; for(int i = 0; i < n; i++) { mp[a[i]]++; if(mp[a[i]] > 1) break; int cnt = i + 1; map<int,int>w1; for(int j = n - 1; j > i; j--) { w1[a[j]] ++; if(mp[a[j]] + w1[a[j]] > 1) break; cnt++; } // printf("%d %d ",i,cnt); ans = max(ans,cnt); } map<int,int>w1; int cnt = 0; for(int j = n - 1; j >= 0; j--) { w1[a[j]]++; if(w1[a[j]] > 1) break; cnt++; } ans = max(ans,cnt); cout << n - ans << endl; }
C.
卡诺图,每行每列的异或后的值一样

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 2e3 + 5; const int mod = 998244353; int a[maxn][maxn]; int main() { int n; cin >> n; int cnt = 0; for(int j = 1; j <= n - 1; j += 2) { for(int i = 1; i <= n - 1; i += 2) { a[i][j] = cnt++; a[i][j + 1] = cnt++; a[i + 1][j] = cnt++; a[i + 1][j + 1] = cnt++; } } for(int i = 1; i<= n; i++) for(int j = 1; j <= n; j++) printf("%d%c",a[i][j],j == n ? ' ' : ' '); }
D.
题意:一个排列,给出当前数之前比其小的数的和,求排列
思路:最后一个数所涵盖的之和肯定是一串连续的 1 - k 的和,二分求其值,树状数组中将其值归零,求倒数第二个的连续之和

#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<stack> #include<cstdlib> #include<queue> #include<set> #include<string.h> #include<vector> #include<deque> #include<map> using namespace std; #define INF 0x3f3f3f3f3f3f3f3f #define inf 0x3f3f3f3f #define eps 1e-4 #define bug printf("********* ") #define debug(x) cout<<#x"=["<<x<<"]" <<endl typedef long long LL; typedef long long ll; const int maxn = 2e5 + 5; const int mod = 998244353; int lowbit(int x) { return x & -x; } LL c[maxn]; int n; void add(int x,int y) { for(int i = x; i <= n; i += lowbit(i)) c[i] += y; } LL getsum(int x) { LL ans = 0; for(int i = x; i; i -= lowbit(i)) ans += c[i]; return ans; } LL s[maxn]; int ans[maxn]; int main() { memset(c,0,sizeof c); cin >> n; for (int i = 1; i <= n; i++) scanf("%lld",&s[i]); for (int i = 1; i <= n; i++) add(i,i); for(int i = n; i >= 1; i--) { int l = 1,r = n; while(r > l) { int mid = (l + r + 1) >> 1; if(getsum(mid - 1) > s[i]) r = mid - 1; else l = mid; } ans[i] = l; add(ans[i],-ans[i]); } for(int i = 1; i <= n; i++) printf("%d%c",ans[i],i == n ? ' ' : ' '); }
EFGH
先留坑