Codeforces Round #632 (Div. 2)

题目链接: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;
}
View Code

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;
}
View Code
原文地址:https://www.cnblogs.com/Vampire6/p/12830722.html