题目链接:http://codeforces.com/contest/1333
A思维题
思路:要求黑的比白的多一个,黑的个数为黑的周围至少有一个白色的黑块的个数,白的个数为周围至少有一个黑的白块的个数,直接令str[n-1][m-1]为白块,其余为黑块即可,这样除了相邻白块的两个黑色的,其余黑色周围就没有白块,因此那些不算入个数,所以2-1=1就满足了
//------------------------------------------------- //Created by HanJinyu //Created Time :一 5/ 4 14:17:40 2020 //File Name :632A.cpp //------------------------------------------------- #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <list> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; typedef double db; typedef long long ll; const int maxn = 200005; int main() { int t; scanf("%d",&t); while(t--){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(i==n&&j==m) printf("W"); else printf("B"); } printf(" "); } } return 0; }
B前缀和
思路:满足i<j的两个数a[i]和a[j]可以将a[j]加上a[i]的值任意次,每次任取满足i<j的ij,那么我们可以前缀和a[i]=1和a[i]等于-1的情况获取区间的为1的个数和为-1的个数,当a[i]和b[i]不相等时,若b[i]>a[i],判断之前有没有1,若没有则不可能实现,若b[i]<a[i],判断之前有没有-1,若没有则不可能实现。
//------------------------------------------------- //Created by HanJinyu //Created Time :一 5/ 4 16:56:31 2020 //File Name :632B.cpp //------------------------------------------------- #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <list> #include <map> #include <string> #include <math.h> #include <stdlib.h> #include <time.h> using namespace std; typedef double db; typedef long long ll; const int maxn = 200005; int main() { #ifdef ONLINE_JUDGE #else freopen("in.txt","r",stdin); #endif int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); ll a[maxn],b[maxn]; for(int i=0;i<n;i++) scanf("%lld",a+i); for(int i=0;i<n;i++) scanf("%lld",b+i); int yi[maxn],fu[maxn]; for(int i=0;i<n;i++) { if(a[i]==-1){ fu[i]=1; yi[i]=0; } else if(a[i]==0){ fu[i]=0; yi[i]=0; } else{ yi[i]=1; fu[i]=0; } } for(int i=1;i<n;i++) { yi[i]+=yi[i-1]; fu[i]+=fu[i-1]; } bool flag=false; for(int i=0;i<n;i++){ if(b[i]!=a[i]&&i==0){ flag=true; break; } else if(b[i]!=a[i]) { if(b[i]>a[i]&&yi[i-1]<=0){ flag=true; break; } else if(b[i]<a[i]&&fu[i-1]<=0){ flag=true; break; } } } if(flag) printf("NO "); else printf("YES "); } return 0; }