闲话:今天是4年一度的奇观——2月29日!(地球人都知道)
所以为了纪念这个特殊的日子,我决定倒着讲。这是什么奇怪的规矩?(雾
Maximizing Productivity:
二分即可。
#include <bits/stdc++.h>
using namespace std;
const int maxn=200005;
int c[maxn],t[maxn],opt[maxn];
int main(){int n,q;cin>>n>>q;for(int i=1;i<=n;i++)cin>>c[i];for(int i=1;i<=n;i++)cin>>t[i];for(int i=1;i<=n;i++){if(c[i]>t[i])opt[i]=c[i]-t[i];elseopt[i]=-1;}sort(opt+1,opt+n+1,less<int>());while(q--){int v,s;cin>>v>>s;int pos=upper_bound(opt+1,opt+n+1,s)-opt;if((n-pos+1)>=v)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}return 0;
}
Milk Exchange:
首先,我们可以模拟。
#include <bits/stdc++.h>
using namespace std;
int main(){int N,M;cin>>N>>M;string s;cin>>s;vector<long long> a(N),limit(N);for(int i=0;i<N;i++){cin>>a[i];limit[i]=a[i];}while(M--){vector<long long> cur=a;for(int i=0;i<N;i++){if(a[i]>=1){cur[i]--;if(s[i]=='L')cur[(i-1+N)%N]++;elsecur[(i+1)%N]++;}}for(int i=0;i<N;i++)cur[i]=min(cur[i],limit[i]);a=cur;}cout<<accumulate(a.begin(),a.end(),0LL)<<endl;return 0;
}
但是很显然,你会得到一个完美的TLE like this:
所以,怎么优化?
如果是R,是L,那么我就叫这两个操作方向对应的两头奶牛称为两头"亏损对"这意味着,只要有牛奶给"亏损对",这部分奶必然会溢出。所以对于每一个"亏损对",只要求出可能被传递给它左右边的奶量,分别对m取最小值即可求出每个亏损对溢出的奶量。
//十年OI一场空,不开long long开祖宗
#include <bits/stdc++.h>
using namespace std;
int main(){int N,M;cin>>N>>M;string s;cin>>s;vector<int> a(N);for(int i=0;i<N;i++)cin>>a[i];vector<bool> badl(N),badr(N);for(int i=0;i<N;i++){if(s[i]=='R' && s[(i+1)%N]=='L'){badl[i]=true;badr[(i+1)%N]=true;}}int ans=accumulate(a.begin(),a.end(),0LL);for(int i=0;i<N;i++){int sum=0;if(badl[i]){int j=(i-1+N)%N;while(s[j]=='R'){sum+=a[j--];if(j<0)j+=N;}}if(badr[i]){int j=(i+1)%N;while(s[j]=='L'){sum+=a[j++];if(j>=N)j-=N;}}ans-=min(sum,M);}cout<<ans<<endl;return 0;
}
Palindrome Game:
这是一道结论题,但是我这种傻子不可能猜到的
先说结论:如果n是整十数,E胜,否则B胜。
首先,1到9都回文,所以此时先手必胜。如果呢?很简单,先手直接把n变成10就赢了。所以,整十数是一个必胜点,每次踩到上面就可以了。代码就很简单啦↓
#include <bits/stdc++.h>
using namespace std;
int main(){int tc;cin>>tc;while(tc--){int S;//注意开stringcin>>S;if(S%10==0)cout<<'E'<<endl;elsecout<<'B'<<endl;}return 0;
}
以上就是本期的全部内容了。我们下期再见ヾ( ̄▽ ̄)Bye~Bye~
友情提醒:本期的全部代码都有问题,请不要无脑Ctrl C+Ctrl V