Codeforces Round #578 (Div. 2)题解

很久没有写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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值