• Codeforces Round #222 (Div. 2) 解题报告


    Problem A Playing with Dice

    题意:两个人心中都想一个数字,然后掷骰子。骰子1-6问你有几种方案会靠近a想的数字几种一样近几种靠近b的?

    思路:大水题一枚直接1-6枚举。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 #include <utility>
     8 #include <queue>
     9 #include <stack>
    10 #include <vector>
    11 #define MP(a, b) make_pair(a, b)
    12 #define PB(a) push_back(a)
    13 
    14 using namespace std;
    15 
    16 typedef long long ll;
    17 typedef pair<int,int> pii;
    18 
    19 const int INF = 0x3f3f3f3f;
    20 const double eps = 1E-6;
    21 
    22 int main()
    23 {
    24 //    freopen("in.txt", "r", stdin);
    25     int a, b;
    26 
    27     while(scanf("%d%d", &a, &b)!=EOF){
    28         int x = 0, y = 0, z = 0;
    29         for(int i=1; i<=6; i++){
    30             if(abs(i-a)==abs(i-b))y++;
    31             else if(abs(i-a)>=abs(i-b))x++;
    32             else z++;
    33         }
    34         cout << z << ' ' << y << ' ' << x << endl;
    35     }
    36     return 0;
    37 }
    View Code

    Problem B Semifinals

    题意:有一些人比赛,晋级规则是有一个k,首先两场比赛的前k名晋级或者是全部选手排名前2k的晋级。

    思路:这道题我是分了两个数组存,一个是一维的一个是二维的。首先标记二维的前n/2个,再标记一位数组排好序后的前n个。最后输出矩阵即可。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 #include <utility>
     8 #include <queue>
     9 #include <stack>
    10 #include <vector>
    11 #define MP(a, b) make_pair(a, b)
    12 #define PB(a) push_back(a)
    13 
    14 using namespace std;
    15 
    16 typedef long long ll;
    17 typedef pair<int,int> pii;
    18 
    19 const int INF = 0x3f3f3f3f;
    20 const double eps = 1E-6;
    21 const int LEN = 100011;
    22 int Map[LEN][2], ans[LEN][2], ss[LEN*2];
    23 
    24 bool cmp(int a, int b){return a>b;}
    25 
    26 int main()
    27 {
    28 //    freopen("in.txt", "r", stdin);
    29     int n;
    30     while(scanf("%d", &n)!=EOF){
    31         memset(ans, 0, sizeof ans);
    32         for(int i=0; i<n; i++){
    33             scanf("%d%d", &Map[i][0], &Map[i][1]);
    34             ss[2*i] = Map[i][0];
    35             ss[2*i+1] = Map[i][1];
    36         }
    37         sort(ss, ss+2*n);
    38         for(int i=0; i<n; i++){
    39             for(int j=0; j<2; j++){
    40                 if(i<n/2 || Map[i][j]<=ss[n-1])ans[i][j] = 1;
    41             }
    42         }
    43         for(int j=0; j<2; j++){
    44             for(int i=0; i<n; i++){
    45                 printf("%d", ans[i][j]);
    46             }
    47             printf("
    ");
    48         }
    49 
    50     }
    51     return 0;
    52 }
    View Code

    Problem C Maze

    题意:一张图中有一个连通分支有s个点。然后现在允许你赌上k个结点,然后要是剩下的结点还在一个联通分支下。

    思路:直接搜索当标记结点等于s-k个时退出(这是标记的点正好形成一个联通分支)然后剩下来的点就是需要填上的点。当然一开始需要先统计一下,图中连通分支的结点数。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 #include <utility>
     8 #include <queue>
     9 #include <stack>
    10 #include <vector>
    11 #define MP(a, b) make_pair(a, b)
    12 #define PB(a) push_back(a)
    13 
    14 using namespace std;
    15 
    16 typedef long long ll;
    17 typedef pair<int,int> pii;
    18 
    19 const int INF = 0x3f3f3f3f;
    20 const double eps = 1E-6;
    21 const int LEN = 1010;
    22 int n ,m, K, vis[LEN][LEN] ,cnt , S;
    23 char Map[LEN][LEN];
    24 int xx[] = {0, 0, 1,-1};
    25 int yy[] = {1,-1, 0, 0};
    26 typedef struct {
    27     int x,y;
    28 }P;
    29 
    30 
    31 void bfs(P s){
    32     queue<P> q;
    33     q.push(s);
    34     vis[s.x][s.y] = 1;
    35     if(cnt>=S-K)return;
    36     while(!q.empty()){
    37         P vex = q.front(); q.pop();
    38         for(int i=0; i<4; i++){
    39             P nv;
    40             nv.x = vex.x+xx[i];
    41             nv.y = vex.y+yy[i];
    42             if(nv.x>=0 && nv.x<n && nv.y>=0 && nv.y<m && Map[nv.x][nv.y]!='#' && !vis[nv.x][nv.y]){
    43                 vis[nv.x][nv.y] = 1;
    44                 cnt++;
    45                 if(cnt>=S-K)return;
    46                 q.push(nv);
    47             }
    48         }
    49     }
    50 }
    51 
    52 
    53 int main()
    54 {
    55 //    freopen("in.txt", "r", stdin);
    56 
    57     P s;
    58     while(scanf("%d%d%d", &n, &m, &K)!=EOF){
    59         for(int i=0; i<n; i++){
    60             scanf("%s", Map[i]);
    61         }
    62         S = 0;
    63         for(int i=0; i<n; i++){
    64             for(int j=0; j<m; j++){
    65                 if(Map[i][j] == '.')S++;
    66             }
    67         }
    68         memset(vis, 0, sizeof vis);
    69         int f = 1;
    70         for(int i=0; i<n; i++){
    71             for(int j=0; j<m; j++){
    72                 if(Map[i][j]=='.'){
    73                     f = 0;
    74                     s.x = i;s.y = j;
    75                     cnt = 1;
    76                     if(S-K>=0)bfs(s);
    77                     break;
    78                 }
    79             }
    80             if(f==0)break;
    81         }
    82 //        debug();
    83         for(int i=0; i<n; i++){
    84             for(int j=0; j<m; j++){
    85                 if(vis[i][j]==0 && Map[i][j] == '.'){
    86                     Map[i][j] = 'X';
    87                 }
    88             }
    89         }
    90         for(int i=0; i<n; i++){
    91             for(int j=0; j<m; j++){
    92                 printf("%c", Map[i][j]);
    93             }
    94             printf("
    ");
    95         }
    96     }
    97     return 0;
    98 }
    View Code
    奔跑吧!少年!趁着你还年轻
  • 相关阅读:
    【java基础知识】1
    【android】工程基本文件介绍
    【sqlite权威指南】笔记3 sqlite入门
    【sqlite权威指南】笔记2 sqlite介绍
    【sqlite权威指南】笔记1 概述
    【sqlite】1 start
    【操作系统】笔记8 存储器
    【操作系统】笔试7 汇编
    【操作系统】笔记6 java基本类型及运算
    【操作系统】笔记5
  • 原文地址:https://www.cnblogs.com/shu-xiaohao/p/3497061.html
Copyright © 2020-2023  润新知