Codeforces Round #637 (Div. 2)

Posted qq103013999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #637 (Div. 2)相关的知识,希望对你有一定的参考价值。

Codeforces Round #637 (Div. 2)

A. Nastya and Rice

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;
 
 
int main(){
    int T;
    cin>>T;
    while(T--){
        int n,a,b,c,d;
        cin>>n>>a>>b>>c>>d;
        int m=(a-b)*n;
        int mm=(a+b)*n;
        if(mm<(c-d)||m>(c+d))cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
    }
 
    return 0;
}

B. Nastya and Door

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+10;
int a[MAXN];
int b[MAXN];
bool vis[MAXN];
int main(){
    int T;
    cin>>T;
    while(T--){
        memset(b,0,sizeof(b));
        memset(vis,0,sizeof(vis));
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        for(int i=2;i<n;i++){
            if(a[i]>a[i-1]&&a[i]>a[i+1]){
                b[i]=b[i-1]+1;
                vis[i]=true;
            }else b[i]=b[i-1];
        }
        b[n]=b[n-1];
        int l=0;
        int ans=-1;
        for(int i=1;i<=n-k+1;i++){
            int res=b[i+k-1]-b[i-1];
            if(vis[i])res--;
            if(vis[i+k-1])res--;
            if(ans<res){
                ans=res;
                l=i;
            }
        }
        cout<<ans+1<<‘ ‘<<l<<endl;
 
    }
 
    return 0;
}

C. Nastya and Strange Generator

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+10;
int a[MAXN];
int main(){
    int T;
    cin>>T;
    while(T--){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        bool ok=true;
        for(int i=1;i<n;i++){
            if(a[i+1]>a[i]+1)ok=false;
        }
        if(ok)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
 
    return 0;
}

D. Nastya and Scoreboard

dp[i][j]:第i位之后使用j根可以组成数字串.
$dp[i][j]=dp[i+1][j-t];$第i位使用t根可以组成数字。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2100;
string s;
int num[10]={0b1110111,0b0010010,0b1011101,0b1011011,0b0111010,0b1101011,0b1101111,0b1010010,0b1111111,0b1111011};//二进制
int a[MAXN];
bool dp[MAXN][MAXN];
int b[MAXN];
int main(){
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>s;
        for(int j=0;j<7;j++){
            a[i]=(a[i]<<1)+(s[j]-‘0‘);
        }
    }
    dp[n+1][0]=true;
    for(int i=n;i>=1;i--){
        for(int j=0;j<10;j++){
            if((num[j]&a[i])==a[i]){
                int t=0;
                for(int l=0;l<7;l++){
                    if(!((a[i]>>l)&1)&&((num[j]>>l)&1))t++;//组成数字j还需要多少木棒
                }
                //cout<<t<<endl;
                for(int r=t;r<=k;r++){
                    dp[i][r]=dp[i][r]|dp[i+1][r-t];//若第i+1位的r-t可行,则第i位的r一定可行
                }
            }
        }
    }
    if(!dp[1][k])cout<<"-1"<<endl;
    else{
        for(int i=1;i<=n;i++){//从高位往后推
            for(int j=9;j>=0;j--){
                if((num[j]&a[i])==a[i]){
                    int t=0;
                    for(int l=0;l<7;l++){
                        if(!((a[i]>>l)&1)&&((num[j]>>l)&1))t++;
                    }
                    if(k>=t&&dp[i+1][k-t]){
                        cout<<j;
                        k-=t;
                        break;
                    }
                }
            }
        }
    }
 
 
    return 0;
}

E. Nastya and Unexpected Guest

待补

以上是关于Codeforces Round #637 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #637 (Div. 2)

Codeforces Round #637 (Div. 2) C. Nastya and Strange Generator 思维(题意杀

Codeforces Round #436 E. Fire(背包dp+输出路径)

[刷题codeforces]650A.637A

[ACM]Codeforces Round #534 (Div. 2)

Codeforces #637 div2 B. Nastya and Door