Nowcoder Weekly Contest
思路:
直接判断
代码:
1 2 3 4 5 6 7
| void solve() { int x; cin>>x; if(x>1599)cout<<"Unrated"; else cout<<"Rated"; }
|
ICPC Medal
思路:
不看银牌都处理成铜牌。
代码:
1 2 3 4 5 6 7 8 9 10 11 12
| void solve() { int a,b,c,x,y; cin>>a>>b>>c>>x>>y; c+=b*x; while(c>=x*y){ int m=c/(x*y); a+=m; c=c-m*x*y+m; } cout<<a; }
|
Unique Number
思路:
最优的情况就是
但是由于有 d 的限制,所以要保证 所以 。找到最小的 k 和 n 做对比得出答案。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const int N=2e5+5; int a; void solve() { int n; cin>>n; int ans=1e9; for(int i=1;i<=n;i++) { cin>>a; ans=min(ans,a+i-1); } cout<<min(ans+1,n)<<endl; }
|
Balanced Array
思路:
滑动窗口。两个滑动窗口存储当前窗口的最大值和最小值,然后进行判断,进行左端点的更新。
代码:
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
| const int N=2e5+5; int a[N]; int qma[N],qmi[N]; void solve() { int n; cin>>n; int ans=0; for(int i=0;i<n;i++) { cin>>a[i]; } int h1=0,t1=-1; int h2=0,t2=-1; int l=0; for(int r=0;r<n;r++) { while(h1<=t1&&a[qma[t1]]<a[r])t1--; qma[++t1]=r; while(h2<=t2&&a[qmi[t2]]>a[r])t2--; qmi[++t2]=r; while(h1<=t1&&h2<=t2&&(a[qma[h1]]-a[qmi[h2]]>1)) { if(qma[h1]==l)h1++; if(qmi[h2]==l)h2++; l++; } ans+=r-l+1;
} cout<<ans<<endl; }
|
Maximize The Sum
思路:
如果数组中全为 0,数组不会发生变化。
一次修改后的三个数字的异或和变为 ,从这里可以看出修改后三个值是不可能得到全 1 的,除非数组本来都是 1。这样最多就只有 n-1。
一个 1 可以变成两个 1,不断重复下去必然能得到 n-1 个 1。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void solve() { int n; cin>>n; string s; cin>>s; bool f0=1,f1=1; for(int i=0;i<n;i++) { if(s[i]=='1'){ f0=0; }else{ f1=0; } } if(f0)cout<<"0"<<endl; else if(f1)cout<<n<<endl; else cout<<n-1<<endl; }
|
F 明天补