• UVa 253 骰子涂色


    https://vjudge.net/problem/UVA-253

    题意:输入两个骰子的六面颜色,判断是否等价。

    思路:我最想到的是暴力,不过一直错,也不知道哪里错了。第二种方法就是在一个骰子里出现的一对颜色在第二个骰子也有,只要三对颜色都匹配成功,那么就是等价的。

     1 #include<iostream>
     2 #include<string>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 char str[20];
     7 int vis[20];
     8 int ok;
     9 
    10 int main()
    11 {
    12     //freopen("D:\txt.txt", "r", stdin);
    13     while (gets(str)!=NULL)
    14     {
    15         ok = 1;
    16         memset(vis, 0, sizeof(vis));
    17         for (int i = 0; i < 3;i++)
    18         for (int j = 6; j < 12; j++)
    19         {
    20             if (!vis[j] && str[i] == str[j] && str[5 - i] == str[17 - j])
    21             {
    22                 vis[j] = vis[17 - j] = 1;
    23                 break;           //这个break必须得加
    24             }
    25         }
    26         for (int i = 6; i < 12; i++)
    27         {
    28             if (!vis[i])
    29             {
    30                 ok = 0;
    31                 cout << "FALSE" << endl;
    32                 break;
    33             }
    34         }
    35         if (ok)  cout << "TRUE" << endl;
    36     }
    37     return 0;
    38 }

    再附上我的暴力,不过是wrong的。先留着吧,以后说不定我就能发现哪里错了。

     1 #include<iostream>
     2 #include<string>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 char str[20], s1[7], s2[7], s3[7], s4[7];
     7 int vis[20];
     8 int ok;
     9 
    10 void solve(int cur)
    11 {
    12     if (cur == 3)
    13     {
    14         s3[6] = '';
    15         for (int k = 0; k < 3; k++)
    16         {
    17             s4[k] = s3[k + 3];
    18             s4[k + 3] = s3[k];
    19         }
    20         s4[6] = '';
    21         if (!strcmp(s1, s3) || !strcmp(s1, s4))
    22         {
    23             ok = 1;
    24         }
    25     }
    26     else
    27     {
    28         for (int i = 0; i < 3; i++)
    29         {
    30             if (ok) return;
    31             if (!vis[i])
    32             {
    33                 s3[cur] = s2[i];
    34                 s3[5 - cur] = s2[5 - i];
    35                 vis[i] = 1;
    36                 solve(cur + 1);
    37                 vis[i] = 0;
    38             }
    39         }
    40     }
    41 }
    42 
    43 int main()
    44 {
    45     //freopen("D:\txt.txt", "r", stdin);
    46     while (gets(str) != NULL)
    47     {
    48         memset(vis, 0, sizeof(vis));
    49         memcpy(s1, str, 6);
    50         memcpy(s2, str + 6, 6);
    51         s1[6] = '';
    52         s2[6] = '';
    53         ok = 0;
    54         solve(0);
    55         if (ok)        cout << "TRUE" << endl;
    56         else cout << "FALSE" << endl;
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    Linux用户空间与内核地址空间
    [Linux内存]——内核地址空间
    使用 GDB 调试多进程程序
    Linux GDB常用命令
    GDB常用命令使用
    GDB调试原理——ptrace系统调用
    不可见乱码 怎么消除
    Vue use的理解
    Element-UI 下边框,表格错位问题
    sort 排序传递更多参数
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6298338.html
Copyright © 2020-2023  润新知