• Codeforces Round #632 (Div. 2)(A+B)


    A. Little Artem

    题意:这一题比较简单,简单说一下就是给你一个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

    B. 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;
    }
  • 相关阅读:
    OpenCV学习(8.22)
    Arduino学习(一)
    OpenCV学习(7.17)
    OpenCV学习(7.16)
    OpenCV学习(7.14)
    OpenCV学习(7.13)
    Android Touch事件传递机制解析
    Android-ViewPagerIndicator
    Android-xUtils-使用GET方式,从服务器获取json字符串
    Android-SlidingMenu-显示隐藏侧边栏
  • 原文地址:https://www.cnblogs.com/blogxsc/p/12675004.html
Copyright © 2020-2023  润新知