牛客练习赛106

链接:牛客练习赛106_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

A.三子棋

​ 一眼题。通过选取几个情况模拟下棋过程后,可以发现在题给条件下,无论A第一步下在哪都能赢。

#include<iostream>
using namespace std;
int main(){
    int x,y;
    cin>>x>>y;
    cout<<"YES";
}

B.药丸

​ 简单的找规律。由于对每个属性值,都会有两个颜色的药丸对应它的加1和减1,并且题目要求考虑最坏情况,所以最终的结果就是刚开始试药的时候每个药丸都要吃一次。然后就是看目标值与初始值的差值,差多少就要吃多少,注意这里要用绝对值。

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
signed main(){
    int n;
    int a[100010];
    int sum=0;
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        sum=sum+abs(x-a[i]);
    }
    if(sum!=0) cout<<2*n+sum;
    else cout<<0;
}

C.01树-简单版本

​ 构造题。题意不难,主要在于是否能找出通用的构造模板。

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==1) cout<<1;
            else if(i==n) cout<<0;
            else if(j%2==1) cout<<0;
            else cout<<1;
        }
        cout<<endl;
    }
}

D.01树-困难版本

​ 构造题。这题的构造情况比较难想,不好看出来,还是建议多动手模拟。

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==1) cout<<1;
            else if(i==n) cout<<0;
            else if(i==n-1){
                if(j%2==1) cout<<0;
                else cout<<1;
            }
            else if(i%2==0){
                if(j==n) cout<<1;
                else cout<<0;
            }
            else{
                if(j==1) cout<<0;
                else cout<<1;
            }
        }
        cout<<endl;
    }
}