zoukankan      html  css  js  c++  java
  • 编程之美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 }
  • 相关阅读:
    BadUSB 利用
    java 将函数作为参数传递
    odoo12 修行提升篇之 常用的高阶函数 (二)
    odoo12 修行提升篇之 异步定时任务 (一)
    odoo12 修行基础篇之 利用kanban做分析 点击跳转分析模型列表 (九)
    odoo12 修行基础篇之 kanban (八)
    odoo12 修行基础篇之 记录批处理 (七)
    odoo12 修行基础篇之 列表的筛选和分组 (六)
    odoo12 修行基础篇之 添加记录编码 (五)
    odoo12 修行基础篇之 添加工作流和操作记录 (四)
  • 原文地址:https://www.cnblogs.com/dongsheng/p/3000603.html
Copyright © 2011-2022 走看看