• 编程之美2013全国挑战赛测试赛


    时间限制: 1000ms 内存限制: 1024MB

    描述

    输入两个正整数A和B, 求A+B的值

    输入

    两个正整数A, B

    输出

    A+B的和

    对于小数据, 0 < A, B <= 10; 对于大数据, 0 < A, B <= 10100
    样例输入
    2 3
    样例输出
    5
     代码如下:
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 
     5 using namespace std;
     6 
     7 char str1[110], str2[110];
     8 int a[110], b[110];
     9 
    10 int main()
    11 {
    12     while(scanf("%s%s", str1, str2) != EOF)
    13     {
    14         int len1 = strlen(str1);
    15         int len2 = strlen(str2);
    16         memset(a, 0, sizeof(a));
    17         memset(b, 0, sizeof(b));;
    18         for(int i = len1-1, j = 0; i >= 0; --i)
    19             a[j++] = str1[i] - '0';
    20         for(int i = len2-1, j = 0; i >= 0; --i)
    21             b[j++] = str2[i] - '0';
    22         for(int i = 0, t = 0; i < 110; ++i)
    23         {
    24             t += a[i] + b[i];
    25             a[i] = t % 10;
    26             t /= 10;
    27         }
    28         int i = 110;
    29         while(a[--i] == 0);
    30         for(; i >=0; --i)
    31             printf("%d", a[i]);
    32         printf("\n");
    33     }
    34     return 0;
    35 }

    时间限制: 1000ms 内存限制: 1024MB

    描述

    石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
    一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期的。请问,小A和小B比了N轮之后,谁赢了?

    输入

    输入的第一行包含一个整数K,表示K组测试数据。
    之后的每组测试数据包含三行。第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。其中,0表示“石头”,2表示“剪刀”,5表示“布”。

    对于小数据,0 < K,N,NA,NB <= 10;对于大数据,0 < K,N,NA,NB <= 100;

    输出

    对于每组测试数据,输出一行。如果小A赢了,输出A;如果小B赢了,输出B;如果两人打平,输出draw。

    提示

    对于第一组测试数据,猜拳过程为:
    A:0 2 5 0 2 5 0 2 5 0
    B:0 5 0 2 0 5 0 2 0 5
    所以A赢了4轮,B赢了2轮,双方打平4轮,所以A赢了。
    对于第二组测试数据,猜拳过程为:
    A:2 0 5 2 0
    B:0 2 5 0 2
    所以A赢了2轮,B赢了2轮,双方打平1轮,所以最终打平了。

    样例输入
    2
    10 3 4
    0 2 5
    0 5 0 2
    5 3 3
    2 0 5
    0 2 5
    样例输出
    A
    draw
    代码如下:
     1 #include <cstdio>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 int scorea, scoreb;
     7 void judge(int a, int b)
     8 {
     9     if(!(a^b))
    10         return;
    11     if(a == 0)
    12     {
    13         if(b == 2)
    14             ++scorea;
    15         else
    16             ++scoreb;
    17     }
    18     else if(a == 2)
    19     {
    20         if(b == 0)
    21             ++scoreb;
    22         else
    23             ++scorea;
    24     }
    25     else
    26     {
    27         if(b == 0)
    28             ++scorea;
    29         else
    30             ++scoreb;
    31     }
    32 }
    33 
    34 int main()
    35 {
    36     int T, n, na, nb;
    37     int a[105], b[105];
    38     scanf("%d", &T);
    39     while(T--)
    40     {
    41         scorea = scoreb = 0;
    42         scanf("%d%d%d", &n, &na, &nb);
    43         for(int i = 0; i < na; ++i)
    44             scanf("%d", &a[i]);
    45         for(int i = 0; i < nb; ++i)
    46             scanf("%d", &b[i]);
    47         for(int i = 0; i < n; ++i)
    48             judge(a[i%na], b[i%nb]);
    49         if(scorea > scoreb)
    50             printf("A\n");
    51         else if(scorea < scoreb)
    52             printf("B\n");
    53         else
    54             printf("draw\n");
    55     }
    56     return 0;
    57 }

    时间限制: 1000ms 内存限制: 1024MB

    描述

    有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
    a.    每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
    b.    走过的格子立即塌陷无法再走第二次;
    c.    只能向北、东、西三个方向走;
    请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。

    输入

    允许在方格上行走的步数n

    输出

    计算出的方案数量

    对于小数据1 <= n <= 20; 对于大数据1 <= n <= 100.
    样例输入
    2
    样例输出
    7
     代码如下:


    这道题由于数据量很大,暂时还没有想到如何处理大数据的问题

    解题思路:
    因为走过之后的格子是不能再走的,所以如果第k步是往北走的,那么第 k+1 步可以往
    三个方向走如果第k步是往东(往西)走的,那么第 k+1 步只能往北或者往东
    (往北或者往西)走两种可能
    a[i] 记录走第i步是往北走的个数
    b[i] 记录走第i步是往东或者者西时候的个数

     1 #include <cstdio>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 long long a[105], b[105];
     7 
     8 void fun()
     9 {
    10     a[0] = 1;
    11     b[0] = 0;
    12     for(int i = 1; i <= 100; ++i)
    13     {
    14         a[i] = a[i-1] + b[i-1];
    15         b[i] = 2 * a[i-1] + b[i-1];
    16     }
    17 }
    18 int main()
    19 {
    20     int n;
    21     fun();
    22     while(~scanf("%d", &n))
    23     {
    24         printf("%lld\n", a[n] + b[n]);
    25     }
    26     return 0;
    27 }
  • 相关阅读:
    Unable to connect to Command Metric Stream 'api/turbine/stream?cluster=REPORTS' Error: {"isTrusted"}
    Spring Boot Admin 1.5.7
    Druid Spring Boot Starter
    09: mysql基础面试题
    08: mysql主从原理
    07: mysql锁和事物隔离
    06: mysql索引查找原理及调优
    05: MySQL高级查询
    04: Mysql性能优化
    02: MySQL的安装与基本配置
  • 原文地址:https://www.cnblogs.com/dongsheng/p/3000603.html
Copyright © 2020-2023  润新知