zoukankan      html  css  js  c++  java
  • CoderForces 327D Block Tower

    Portal:http://codeforces.com/problemset/problem/327/D

    一座红塔200人,一座蓝塔100人,只有与蓝塔相邻才可以建红塔。

    '.'处可建塔 '#'处不可建塔

    可以随便毁塔

    在建造能够容纳最多人数的塔集合情况下,输出对塔的操作(SPJ)

    这是一道水题

    这是一道卡输入输出的题

    DFS就好,反正就是在联通分量里炸割顶留根

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<set>
     4 #include<cstdio>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<cstring>
     8 #include<vector>
     9 using namespace std;
    10 #define FOR(i,j,k) for(int i=j;i<=k;i++)
    11 #define FORD(i,j,k) for(int i=j;i>=k;i--)
    12 #define LL long long
    13 #define SZ(x) int(x.size())
    14 #define maxm 510
    15 #define maxn 510
    16 string x;
    17 int dx[]={1,0,-1,0};
    18 int dy[]={0,1,0,-1};
    19 int m,n,sum;
    20 vector<char> al;
    21 vector<int> ax,ay;
    22 char ii[maxm][maxn];
    23 int a[maxm][maxn],vis[maxm][maxn],col[maxm][maxn];
    24 bool cr(int xx,int yy)
    25 {
    26     FOR(i,0,3)
    27     if(xx+dx[i]>0&&xx+dx[i]<=m&&yy+dy[i]>0&&yy+dy[i]<=n)
    28     if(col[xx+dx[i]][yy+dy[i]]==1) return true;
    29     return false;
    30 }
    31 void dfs(int x,int y)
    32 {
    33     vis[x][y]=1;
    34     /*if(cr(x,y)) {al.push_back('R');ax.push_back(x);ay.push_back(y);col[x][y]=2;sum++;}
    35     else */{al.push_back('B');ax.push_back(x);ay.push_back(y);col[x][y]=1;sum++;}
    36     FOR(i,0,3)
    37     if(x+dx[i]>0&&x+dx[i]<=m&&y+dy[i]>0&&y+dy[i]<=n)
    38     if(a[x+dx[i]][y+dy[i]]) if(!vis[x+dx[i]][y+dy[i]]) dfs(x+dx[i],y+dy[i]);
    39     if(col[x][y]==1) if(cr(x,y)) { al.push_back('D');ax.push_back(x);ay.push_back(y);
    40      al.push_back('R');ax.push_back(x);ay.push_back(y);col[x][y]=2;sum+=2;}
    41 }
    42 int main()
    43 {
    44 cin>>m>>n;
    45 FOR(i,1,m)
    46 {scanf("%s",&ii[i][1]);
    47 FOR(j,1,n)
    48 {
    49 a[i][j]=(ii[i][j]=='.');
    50 }
    51 }
    52 FOR(i,1,m)
    53 FOR(j,1,n)
    54 if(a[i][j]&&!vis[i][j]) dfs(i,j);
    55 cout<<sum<<endl;
    56 FOR(i,0,SZ(al)-1)
    57 printf("%c %d %d
    ",al[i],ax[i],ay[i]);
    58 return 0;
    59 }
    特别丑的原代码(AC)
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<set>
     4 #include<cstdio>
     5 #include<cstdlib>
     6 #include<cmath>
     7 #include<cstring>
     8 #include<sstream>
     9 using namespace std;
    10 #define FOR(i,j,k) for(int i=j;i<=k;i++)
    11 #define FORD(i,j,k) for(int i=j;i>=k;i--)
    12 #define LL long long
    13 #define SZ(x) int(x.size())
    14 #define maxm 510
    15 #define maxn 510
    16 char x;
    17 stringstream ans;
    18 int dx[]={1,0,-1,0};
    19 int dy[]={0,1,0,-1};
    20 int m,n,sum;
    21 char ii[maxm][maxn];
    22 int a[maxm][maxn],vis[maxm][maxn],col[maxm][maxn];
    23 bool cr(int xx,int yy)
    24 {
    25     FOR(i,0,3)
    26     if(xx+dx[i]>0&&xx+dx[i]<=m&&yy+dy[i]>0&&yy+dy[i]<=n)
    27     if(col[xx+dx[i]][yy+dy[i]]==1) return true;
    28     return false;
    29 }
    30 void dfs(int x,int y)
    31 {
    32     vis[x][y]=1;
    33     ans<<"B "<<x<<' '<<y<<"
    ";col[x][y]=1;sum++;
    34     FOR(i,0,3)
    35     if(x+dx[i]>0&&x+dx[i]<=m&&y+dy[i]>0&&y+dy[i]<=n)
    36     if(a[x+dx[i]][y+dy[i]]) if(!vis[x+dx[i]][y+dy[i]]) dfs(x+dx[i],y+dy[i]);
    37     if(col[x][y]==1) if(cr(x,y)) {     ans<<"D "<<x<<' '<<y<<"
    ";
    38      ans<<"R "<<x<<' '<<y<<"
    ";col[x][y]=2;sum+=2;}
    39 }
    40 int main()
    41 {
    42 cin>>m>>n;
    43 FOR(i,1,m)
    44 FOR(j,1,n)
    45 {
    46     cin>>x;
    47     a[i][j]=(x=='.');
    48 }
    49 FOR(i,1,m)
    50 FOR(j,1,n)
    51 if(a[i][j]&&!vis[i][j]) dfs(i,j);
    52 cout<<sum<<endl;
    53 cout<<ans.str();
    54 return 0;
    55 }
    改后依然很丑的代码

    输出黑科技sstream orz

    #include<sstream> x;
    x<<.....;
    cout<<x.str();

    输入黑科技

    scanf("%s",&string[i][1]);

  • 相关阅读:
    del命令
    echo命令
    什么是批处理
    ubuntu禁止ping操作(禁用ICMP协议访问)
    树莓派:raspberry pi 3b
    小tips合集
    吐个槽:bose的售后真心差劲!愧对这个顶级音响产品!
    WinSetupFromUSB
    win7 64位下vs不能以管理员身份运行的问题解决
    vs2010中如何设置Visual Assist方便地使用现成的代码编辑器风格
  • 原文地址:https://www.cnblogs.com/mukoiaoi/p/5837809.html
Copyright © 2011-2022 走看看