• D. 3-Coloring


    很有意思的交互题

    给定n*n的棋盘,有三个数123可供选择填,要求是任意格子的上下左右不能和本格相同。

    每次给一个数,要求本次填写不能用该数。

    考虑到两个数字的符合情况的解

      1  2  1  2

      2  1  2  1

      1  2  1  2

      2  1  2  1

    那么结论就是

    不让我们用1,我们就填2

    不让我们用2,我们就填1

    不让我们用3,啊,那不用就不用嘛。

    这样肯定是符合条件的,对吧。

    这时候就有一个问题了 不让我们用1,我们就填2,可是2的所有位置都填满了怎么办

    那就在1的位置上填3,填满的2已经帮我们阻隔了所有1位置。

    同理,不让我们用2,我们就填1,1位置填满了咋办,在2的位置上填3就好了

    vector<pair<int,int>>v[5];
    void print(int col,pair<int,int> x){
        cout<<col<<" "<<x.first<<" "<<x.second<<endl;
    }
    void solve(){
        cin>>n;
        for(int i=1;i<=n;++i){
            for(int j=1;j<=n;++j){
                v[(i+j)%2].push_back({i,j});
            }
        }
        for(int i=1;i<=n*n;++i){
            int x;cin>>x;
            if(x==1){
                if(v[1].size()){
                    print(2,v[1].back());
                    v[1].pop_back();
                }
                else{
                    print(3,v[0].back());
                    v[0].pop_back();
                }
            }
            else if(x==2){
                if(v[0].size()){
                    print(1,v[0].back());
                    v[0].pop_back();
                }
                else{
                    print(3,v[1].back());
                    v[1].pop_back();
                }
            }
            else{
                if(v[0].size()){
                    print(1,v[0].back());
                    v[0].pop_back();
                }
                else{
                    print(2,v[1].back());
                    v[1].pop_back();
                }
            }
        }
    }
  • 相关阅读:
    SQL-----DML
    C#常见笔试题
    事务
    HTM5制作的闹钟
    InforPath获取当前用户
    邮件中的样式问题
    InforPath的几个基础性的东西
    代码读取InforPath内容并进行修改
    python操作mysql(4)--增删改查
    python操作mysql(3)--链接数据库
  • 原文地址:https://www.cnblogs.com/PdrEam/p/14746739.html
Copyright © 2020-2023  润新知