很久没有写cf题解了,因为很久没有打cf …
这次div2 总体来说不是很难,但是就是太菜…
Codeforces Round #578 (Div. 2)
A.Hotelier
题意是有10个房间,从左进的客人会住最左边空闲的房间,从右进的客人会住进最右边空闲的房间,给你客人进来或者退房的字符串,要你输出最后房间的状态。
思路: 暴力一遍就行了,每次遍历10个房间看最左边或者最右边有没有空房间
B.Block Adventure
b题题意是 你要从第一个柱子到n个柱子,每个柱子上有xi个石块,你可以取走任意块石块,或者从包里放上一定量的石块,只有|x[i]-x[i+1]|<=k 你才能移动到下一个柱子。
赛中无限wa… 太真实了… 赛后才发现,判断的时候只要到n-1就行了。。。我一直在用n和n+1(0) 做比较。。。天呐。。。
思路就是 : 每次都把当前柱子全部取完,然后往上面放最少满足要求的即可
#include <bits/stdc++.h>
using namespace std;
const int MAX=1005;
int a[MAX];
int main ()
{
int T;
cin>>T;
while(T--)
{
int n,m,k;
int flag=0;
cin>>n>>m>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
if(n==1){
cout<<"YES"<<endl;
}else {
for(int i=0;i<n-1;i++){
m+=a[i];
if(a[i+1]>=k){
m-=(a[i+1]-k);
}
if(m<0){
flag=1;
break;
}
}
if(flag){
cout<<"NO"<<endl;
}
else {
cout<<"YES"<<endl;
}
}
}
return 0;
}
C.Round Corridor
c题挺简单的,大致意思就是在内圈和外圈放隔板,如果两个隔板位置一样就会被挡住,问你两个区间能否相同
思路: 求出内外圈隔板数量的最大公约数,然后分别用内外圈隔板除去最大公约数,得出的ans 就是 内外圈每隔ans次会被划分到一个密闭空间,最后判断是否在同一空间即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll n ,ll m){
if(m==0){
return n;
}
return gcd(m,n%m);
}
int main(){
ll n,m,q;
cin>>n>>m>>q;
ll ans=gcd(n,m);
ll inner=n/ans,outer=m/ans;
ll sx,sy,ex,ey;
while(q--){
cin>>sx>>sy>>ex>>ey;
if(sx==1){
sy--;
sy/=inner;
}
else {
sy--;
sy/=outer;
}
if(ex==1){
ey--;
ey/=inner;
}
else {
ey--;
ey/=outer;
}
if(sy==ey){
cout<<"YES"<<endl;
}
else {
cout<<"NO"<<endl;
}
}
return 0;
}
D. White Lines 传送门
可以看看我的另一篇文章
E.
kmp
…