zoukankan      html  css  js  c++  java
  • agc004c

    一个不用保证边界没有颜色的做法。(但是四个角落有颜色还是不行)

    只需要像图中那样,把一个贪吃蛇的形状染上色,再把读入的有颜色的格子给两个都染上色即可。

    #include<bits/stdc++.h>
    using namespace std;
    #define uu unsigned
    #define scanf abc=scanf
    #define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
    #define forg(i,x) for(int i=fir[x];i;i=nxt[i])
    int abc;
    typedef pair<int,int>pii;
    typedef long long ll;
    typedef uu long long ull;
    typedef vector<int>VI;
    inline int rd(int l,int r){return rand()%(r-l+1)+l;}
    
    const int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
    int n,m,vs[503][503];char s[503][503],s1[503][503],s2[503][503];
    
    int main(){
        cin>>n>>m;for(int i=1;i<=n;++i)cin>>s[i]+1;
        for(int i=0;i<=n+1;++i)vs[i][0]=vs[i][m+1]=3;for(int i=0;i<=m+1;++i)vs[0][i]=vs[n+1][i]=3;
        int x1=1,y1=1,x2=n,y2=m,ls=0;
        while(1){
            vs[x1][y1]=1,vs[x2][y2]=2;
            int k=-1;
            if(!vs[x1+dx[ls]][y1+dy[ls]])k=ls;else for(int o=0;o<4;++o)if(!vs[x1+dx[o]][y1+dy[o]])assert(k==-1),k=o;
            if(k==-1)break;
            x1+=dx[k],y1+=dy[k],x2-=dx[k],y2-=dy[k];ls=k;
        }
        for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)s1[i][j]=s2[i][j]='.';
        for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if(vs[i][j]==1)s1[i][j]='#';else s2[i][j]='#';
        for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if(s[i][j]=='#')s1[i][j]=s2[i][j]='#';
        for(int i=1;i<=n;++i)cout<<s1[i]+1<<endl;puts("");
        for(int i=1;i<=n;++i)cout<<s2[i]+1<<endl;
        return 0;
    }
    
  • 相关阅读:
    学习进度条08
    学习进度条07
    子数组和最大值(二维)
    学习进度条06
    构建之法阅读笔记04
    四则运算网页版
    泛型代码中的默认关键字
    js 日期大小比较
    c#Reverse字符串
    c#获取数组中指定元素的索引
  • 原文地址:https://www.cnblogs.com/happyguy/p/15247659.html
Copyright © 2011-2022 走看看