• C. A Mist of Florescence


     

    http://codeforces.com/contest/989/problem/C

     

    这磨人的小妖精……

     

    贪心,不难发现正确性,用一个A、B、C、D、分别哪拿一个出来画框,每一个框处理一种字母

     

    例如一个框长这样:

     

     

    加层后长这样:

     

    反正都只花费1个A

     

    处理字母后长这样:

     

     

    我用1个A画框来处理剩余B,1个B画框来处理剩余C,以此类推。

    我的框长度都为50,如果有字母要处理,框占2行,字母2行,不够再2行,最多6行就可以处理完100个字符。(因为每2行处理49个)。

    处理一个字符最多8行,4*8=32,50行是足够的。

     

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         Scanner io = new Scanner(System.in);
     5         
     6         char[][] ans = new char[200][200];
     7         //ans[p1][]:正在处理的字符串
     8         int p1 = 0;
     9         int[][] a = new int[4][2];
    10 
    11         for (int i = 0; i < 4; i++) {
    12             a[i][0] = io.nextInt();
    13             a[i][1] = 'A' + i;
    14         }
    15 
    16         for (int i = 0; i < 4; i++) {
    17 
    18             //框字符ch1,处理字符ch2,有num个ch2处理
    19             int j = i == 3 ? 0 : i + 1;
    20             char ch1 = (char) a[i][1], ch2 = (char) a[j][1];
    21             //不管num个数多少,都画框
    22             for (int k = 0; k < 50; k++) ans[p1][k] = ch1;
    23             p1++;
    24 
    25             int num = a[j][0] - 1;
    26             //处理ch2
    27             if (num>0){
    28                 //x是处理行1,y是处理行2,z是列指针,v在01之间不停变换
    29                 int x = p1, y = p1 + 1, z = 0, v = 0;
    30                 char[] t = new char[]{ch1, ch2};
    31                 //框的右边界
    32                 ans[p1][49]=ans[p1+1][49]=ch1;
    33                 p1+=2;
    34                 while (num-- > 0) {
    35                     //2行不够
    36                     if (z==49){
    37                         for (int k = 0; k < 50; k++) ans[y+1][k]=ch1;
    38                         x+=3;y+=3;p1+=3;z=0;v^=1;
    39                         ans[x][49]=ans[y][49]=ch1;
    40                     }
    41                     //画ch2
    42                     ans[x][z] = t[v];
    43                     ans[y][z++] = t[v^=1];
    44                 }
    45                 //处理完ch2后补全字符串后面的空余部分
    46                 for (int k=z;ans[x][k]==0&&z-1>=0;k++){
    47                     ans[x][k]=ans[x][z-1];
    48                     ans[y][k]=ans[y][z-1];
    49                 }
    50             }
    51             //画下半边框
    52             for (int k = 0; k < 50; k++) ans[p1][k] = ch1;
    53             p1++;
    54         }
    55 
    56         System.out.println(p1+" "+50);
    57         for (int i = 0; i <p1; i++) System.out.println(new String(ans[i]).substring(0,50));
    58     }
    59 }
  • 相关阅读:
    流行技术博客站点收录
    session过期后自动跳转到登陆页
    《AngularJS》--指令的相互调用
    java socker编程
    20189307《网络攻防》第十一周作业
    20189307《网络攻防》第十周作业
    20189307《网络攻防》第九周作业
    20189307《网络攻防》第八周作业
    20189307《网络攻防》第七周作业
    20189307《网络攻防》第六周作业
  • 原文地址:https://www.cnblogs.com/towerbird/p/11248454.html
Copyright © 2020-2023  润新知