zoukankan      html  css  js  c++  java
  • Timus Online Judge:ural:1006. Square Frames

    原题链接:http://acm.timus.ru/problem.aspx?space=1&num=1006

    看到题第一反应:这玩意怎么读入……

    本地的话因为是全角字符,会占两个位置,所以需要使用两个getchar()(反正我的IDE会这样),而提交上去getchar是可以读入218,191这样的ASCII码值的。

    主程序段就不用说了,随便暴力跑跑就好。

    然后是几个坑点:

    “Your sequence does not have to be the same with the original sequence used to build the picture on the screen.”

    这句并不是说你的正方形输出顺序可以打乱,顺序还是要按画的顺序来。

    “(0 ≤ Xi ≤ 49, 0 ≤ Yi ≤ 19) (2 ≤ Ai)”

    输出顺序是先列后行,而且从0开始。Ai指的是正方形边长。

    样例居然不让复制,那就不用好了,自己打它个20*50的点阵然后慢慢改。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define MN 151
    using namespace std;
    int read_p,read_ca,read_f;
    inline int read(){
        read_p=0;read_ca=getchar();read_f=1;
        while(read_ca<'0'||read_ca>'9') read_f=read_ca=='-'?-1:read_f,read_ca=getchar();
        while(read_ca>='0'&&read_ca<='9') read_p=read_p*10+read_ca-48,read_ca=getchar();
        return read_p*read_f;
    }
    int map[100][100],c,X[100],Y[100],Z[100],num=0;
    bool work(int x,int y,int z){
        if (map[x+z][y]!=1&&map[x+z][y]!=184) return 0;
        if (map[x][y+z]!=1&&map[x][y+z]!=180) return 0;
        if (map[x+z][y+z]!=1&&map[x+z][y+z]!=188) return 0;
        for (int i=x+1;i<x+z;i++)
        if (map[i][y+z]!=1&&map[i][y+z]!=166) return 0;
        
        for (int i=y+1;i<y+z;i++)
        if (map[x+z][i]!=1&&map[x+z][i]!=164) return 0;
        
        int mmh=0;
        for (int i=y;i<=y+z;i++)
        mmh|=(map[x][i]!=1)|(map[x+z][i]!=1);
        
        for (int i=x;i<=x+z;i++)
        mmh|=(map[i][y]!=1)|(map[i][y+z]!=1);
        
        if (!mmh) return 0;
        num++;
        X[num]=x;Y[num]=y;Z[num]=z+1;
        
        for (int i=y;i<=y+z;i++)
        map[x][i]=1,map[x+z][i]=1;
        
        for (int i=x;i<=x+z;i++)
        map[i][y]=1,map[i][y+z]=1;
    }
    int main(){
        //freopen("a.in","r",stdin);
        /*printf("%d
    ",getchar());
        printf("%d
    ",getchar());*/
        register int i,j,k;
        for (i=1;i<=20;i++)
        for (j=1;j<=50;j++){
            while (c=getchar(),c=='
    '||c==' ');
            if (c==218) map[i][j]=176;else
            if (c==191) map[i][j]=180;else
            if (c==217) map[i][j]=188;else
            if (c==192) map[i][j]=184;else
            if (c==179) map[i][j]=166;else
            if (c==196) map[i][j]=164;else map[i][j]=0;
            //if (c==169) map[i][j]=getchar();else map[i][j]=0;
        }
        for (;;){
            for (i=1;i<=20;i++){
                for (j=1;j<=50;j++) if (map[i][j]>1) break;
                if (j<=50) break;
            }
            if (i>20) break;
            for (i=1;i<=20;i++)
            for (j=1;j<=50;j++)
            if (map[i][j]==1||map[i][j]==176)
            for (k=1;i+k<=20&&j+k<=50;k++)
            if (work(i,j,k)||(map[i+k][j]!=166&&map[i+k][j]!=1)||(map[i][j+k]!=164&&map[i][j+k]!=1)) break;
        }
        
        printf("%d
    ",num);
        for (i=num;i;i--){
            printf("%d %d %d",Y[i]-1,X[i]-1,Z[i]);
            if (i!=1) putchar('
    ');
        }
    }
    View Code
  • 相关阅读:
    Electron+Vue开发跨平台桌面应用
    html2canvas生成图片
    将某个DIV内容保存成图片,使用HTML2CANVAS截图方法(高清图并解决图片跨域问题)
    css3实现动画效果完整代码demo
    Vue + element从零打造一个H5页面可视化编辑器——pl-drag-template
    Vue.Draggable学习总结
    3d学习网
    vue router 报错: Uncaught (in promise) NavigationDuplicated {_name:""NavigationDuplicated"... 的解决方法
    网页适配 iPhoneX,就是这么简单
    关于for循环
  • 原文地址:https://www.cnblogs.com/Enceladus/p/6232668.html
Copyright © 2011-2022 走看看