题意:这一题比较简单,简单说一下就是给你一个n*m的矩阵,要你去涂色,其中‘B’代表黑色,‘W’代表白色,要求是两者符合这个等式:B=W+1。
题解:简单签到题,但我在比赛的时候用了复杂的方法,所以耗的时间较长,赛后看到别人的解法,真的是醍醐灌顶。
代码:
法一:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int nk_max = 8 + 5; const int INF = 0x3fffffff; int main() { int t; int n,m; cin>>t; while(t--) { int B,W; cin>>n/*行数*/>>m/*列数*/; int tot=n*m; char ptr[150][150]; if(tot%2==0) { B=tot/2; W=B-1; } else { B=(tot/2)+1; W=tot-B; } //涂色 for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(i%2!=0&&j%2==0) { ptr[i][j]='W'; } if(i%2!=0&&j%2!=0) { ptr[i][j]='B'; } if(i%2==0&&j%2!=0) { ptr[i][j]='W'; } if(i%2==0&&j%2==0) { ptr[i][j]='B'; } } } // cout<<B<<" "<<W<<"==="<<endl; if(tot%2==0) {//判断奇偶性,如果是偶数的话 if(ptr[n][m]=='B') { ptr[n][m-1]='B'; } else { ptr[n][m]='B'; } } for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cout<<ptr[i][j]; } cout<<endl; } } return 0; }
法二:
这个的思路比较简单,代码也比较简洁;
#include <bits/stdc++.h>
using namespace std;
signed main() {
ios::sync_with_stdio(false);
int t,n,m;
cin>>t;
while(t--) {
cin>>n>>m;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(i==1 && j==1) cout<<"W";
else cout<<"B";
}
cout<<endl;
}
}
}
转载自:https://www.cnblogs.com/mollnn/p/12664323.htmlB. Kind AntonB. Kind AntonB. Kind Anton
题意:给你两个字符串,其中a只包括-1,0,1;b数组的组成没有限制,先选定i,j,其中i<j,对a数组进行操作,aj=ai+aj,,注意,此时(i<j),现在要你判断a数组是否可以通过变化变化为数组a。
题解:这一题如果靠简单的模拟来做的话,会超时,这里我们用map来记录a中出现的每一个元素出现的次数,之后我们从后往前遍历判断每一个元素,具体实现看代码。
#include<iostream> #include<cstring> #include<algorithm> #include<map> int a[100010]={0}; int b[100010]={0}; using namespace std;; int main(){ int t,n; cin>>t; map<int,int> mp; while(t--){ mp.clear(); scanf("%d",&n); for(int i=1;i<=n;i++){ cin>>a[i]; mp[a[i]]++; } for(int i=1;i<=n;i++){ cin>>b[i]; }//数据输入完毕,下面开始处理数据 int f=1; for(int i=n;i>=1;i--){ mp[a[i]]--; if(a[i]==b[i]){ continue; } if(a[i]<b[i]){ if(!mp[1]){ f=0; break; } } if(a[i]>b[i]){ if(!mp[-1]){ f=0; break; } } } if(f){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } return 0; }