zoukankan      html  css  js  c++  java
  • ACM-南京理工大学第八届程序设计竞赛-网络赛(2016.04.17)

    A、偷吃糖果
    Time Limit: 1000Ms

    Memory Limit: 65536KB

    Description
    小鱼喜欢吃糖果。他有两盒糖果,两盒糖果分别仅由小写字母组成的字符串s和字符串t构成。其中'a'到'z'表示具体的某种糖果类别。
    他原本打算送给他喜欢的女生,但是要送给女孩子的话两盒糖果不能有差别(即字符串s和t完全相同)。所以,他决定偷吃几块,他吃糖果的策略是每次选出一盒糖果中两个连续的同种类别的糖果,然后吃掉其中一块。该策略可以使用多次。
    例如一盒糖果是'rrrjj',他可以把这盒糖果变成'rrjj'或者'rrrj'。现在你要告诉小鱼,经过他多次偷吃糖果之后,两盒糖果能否送给他喜欢的女孩子。如果可以输出'Yes',如果不行输出'No'。
    Input
    第一行一个T,表示T组测试数据。每组测试数据格式如下。
    第一行表示字符串s,第二行表示字符串t。
    1 ≤ T ≤ 100
    Each character of s, t will be between 'a' and 'z'.
    1 ≤ length of string s ≤ 1000
    1 ≤ length of string t ≤ 1000
    Output
    对于每组测试数据,输出Yes,或者No。
    Sample Input
    2
    rrrjj
    rrrj
    rj
    jr
    Sample Output
    Yes
    No
    Hint
    题目中的第一个样例:
    第一盒糖果:rrrjj -> rrjj -> rjj -> rj
    第二盒糖果:rrrj -> rrj -> rj

    分析:咋一看以为是字符串匹配,后来题意理解错了,然后开始从新写,看这句话“两个连续的同种类别的糖果”

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 int main(void)
     5 {
     6     char a[1100], b[1100], a1[1100], b1[1100],c;
     7     int i1,i, j, t, n;
     8 
     9     scanf("%d", &t);
    10         c = getchar();
    11         for (i1 = 0;i1 < t;i1++)
    12         {
    13             gets(a);
    14             gets(b);
    15             j = 0;
    16             for (i = 1;a[i] != '';i++)
    17             {
    18                 if (a[i] != a[i - 1])
    19                 {
    20                     a1[j] = a[i - 1];
    21                     j++;
    22                 }
    23             }
    24                 a1[j] = a[i - 1];
    25                 j++;
    26             a1[j] = '';
    27             j = 0;
    28             for (i = 1;b[i] != '';i++)
    29             {
    30                 if (b[i] != b[i - 1])
    31                 {
    32                     b1[j] = b[i - 1];
    33                     j++;
    34                 }
    35             }
    36                 b1[j] = b[i - 1];
    37                 j++;
    38             b1[j] = '';
    39             if (strcmp(a1, b1) == 0)
    40                 printf("Yes
    ");
    41             else
    42                 printf("No
    ");
    43         }
    44 }

    H、谁才是最强战舰!
    Time Limit: 1000MS

    Memory Limit: 65536KB

    Description
    依阿华来到镇守府的第一件事情,就是找大和solo!
    然而这并不是什么好消息,说不定,镇守府,甚至佐伯湾就这么消失了。。。
    于是,提督君想了一个简单的游戏,来分出她们的胜负。游戏规则如下:这里有N堆石子,每堆石子有a[i](1<=i<=N)个,每人轮流从其中的某一堆石子中拿出任意个石子(只能在其中一堆拿,不能不拿),大和先手,谁拿出了最后一个石子,谁输。若大和必胜,输出“Yamato_Saikou!”,若依阿华必胜,输出“Meidikeji_Shijiediyi!”,若两边都无法必胜,输出“Sayonara_Konosekai!”.
    Input
    第一行输入一个正整数T(1 <= T <= 1000),表示有T组测试数据。
    对于每组测试数据:
    第一行一个正整数,N(N<=1000),表示有N堆石子。
    第二行N个整数a[i](1<=a[i]<=1000),表示每堆石子的数量。
    Output
    若大和必胜,输出“Yamato_Saikou!”,若依阿华必胜,输出“Meidikeji_Shijiediyi!”,若两边都无法必胜,输出“Sayonara_Konosekai!”.
    Sample Input
    3
    1
    5
    2
    1 2
    3
    1 1 1
    Sample Output
    Yamato_Saikou!
    Yamato_Saikou!
    Meidikeji_Shijiediyi!

    思路:anti-nim博弈,题目给出这句话,自己感觉蒙圈了,好像没有用到

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int t;
     5     scanf("%d",&t);
     6     while(t--)
     7     {
     8         int n,s=0,m,c=0;
     9         scanf("%d",&n);
    10         m=n;
    11         while(n--)
    12         {
    13             int num;
    14             scanf("%d",&num);
    15             s^=num;
    16             if(num>1)
    17                 c++;
    18         }
    19         if(!s&&!c||(s&&c))
    20             printf("Yamato_Saikou!
    ");
    21         else
    22             printf("Meidikeji_Shijiediyi!
    ");
    23     }
    24 }

    C、count_prime
    Time Limit: 1000ms

    Memory Limit: 65536KB

    Description
    给定你一个数n,请你统计出在[a,b]这个区间中和n互质的数的个数。
    两个数互质当且仅当他们除了1之外没有其他的公共因子或者他们最大的公共因子是1。1和任何数是互素的。
    Input
    第一行输入一个整数T(1 <= T <= 100),表示T组测试数据。
    接下来T行,每行3个整数a,b,n(1 <= a <=b <=10^15, 1<= n <= 10^9),用空格隔开。
    Output
    输出一个整数表示和n互质的数的个数。
    Sample Input
    2
    1 10 2
    3 10 5
    Sample Output
    5
    6

    灰灰做的:思路是容斥原理

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 using namespace std;  
     5 #define LL long long   
     6 #define maxn 70  
     7   
     8 LL prime[maxn];  
     9 LL make_ans(LL num,int m)  
    10 {  
    11     LL ans=0,tmp,i,j,flag;  
    12     for(i=1;i<(LL)(1<<m);i++) 
    13     {  
    14         tmp=1,flag=0;  
    15         for(j=0;j<m;j++)   
    16             if(i&((LL)(1<<j))) 
    17                 flag++,tmp*=prime[j];  
    18         if(flag&1)//容斥原理   
    19             ans+=num/tmp;  
    20         else  
    21             ans-=num/tmp;  
    22     }  
    23     return ans;  
    24 }  
    25   
    26 int main()  
    27 {  
    28     int T,t=0,m;  
    29     LL n,a,b,i;  
    30     scanf("%d",&T);  
    31     while(T--)  
    32     {  
    33         scanf("%I64d%I64d%I64d",&a,&b,&n);  
    34         m=0;  
    35         for(i=2;i*i<=n;i++)  
    36             if(n&&n%i==0)  
    37             {  
    38                 prime[m++]=i;  
    39                 while(n&&n%i==0)  
    40                     n/=i;  
    41             }     
    42         if(n>1)  
    43             prime[m++]=n;  
    44         printf("%I64d
    ",(b-make_ans(b,m))-(a-1-make_ans(a-1,m)));  
    45     }  
    46     return 0;  
    47 }  

    一共做出5题,未完待续。。。。。。。

  • 相关阅读:
    poj3481
    查找湖南问题
    tyvj1033
    tyvj1088
    oil倒油
    加分二叉树
    模拟题2
    模拟题3
    Free pascal中的random函数
    Spring MVC入门配置
  • 原文地址:https://www.cnblogs.com/chengxs/p/5402882.html
Copyright © 2011-2022 走看看