牛客练习赛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;
}
}