zoukankan      html  css  js  c++  java
  • Codeforces Round #292 (Div. 2)

    A

    题意:给出起点(0,0)以及终点(x,y),再给出步数s,这个人可以往上下左右四个方向走,问能不能恰好在s步走到终点

    先求出最小步数min,然后就可以认为这个人在磨蹭时间,走回去再走回来,在min的基础上加上2的倍数都是能够恰好到达的。

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 using namespace std;
     6 int main()
     7 {
     8     int a,b,s;
     9     scanf("%d %d %d",&a,&b,&s);
    10     if(a<0) a=-a;
    11     if(b<0) b=-b;
    12 //    printf("a=%d
    ",a);
    13     
    14 //    printf("b=%d
    ",b);
    15     
    16     int k=s-a-b;
    17     
    18 //    printf("%d
    ",k);
    19     if(a==0&&b==0)
    20     {
    21         if(s%2==0) 
    22         printf("Yes
    ");
    23         else
    24         printf("No
    ");
    25     }
    26     else
    27     {
    28         if(k%2==0&&k>=0)
    29         printf("Yes
    ");
    30         else
    31         printf("No
    ");
    32     }
    33 }
    View Code

    B

    题意:一个人的朋友中有n个男孩,m个女孩,他可以在第i天邀请(i从0开始算),在第i天,他可以邀请第i%n个男孩,第i%m个女孩,然后男孩中有b个开心,女孩子中有g个开心,然后邀请的两个人中只要有一个人开心,另外一个也会变开心。 问能不能使得所有的男孩女孩都开心。

    模拟这个邀请的过程直到大家都开心,跳出循环。

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 using namespace std;
     6 int x[1005],y[1005];
     7 int n,m;
     8 int main()
     9 {
    10     int i,j,b,g,u,flag=0,sum=0;
    11     scanf("%d %d",&n,&m);
    12     scanf("%d",&b);
    13     for(i=1;i<=b;i++)
    14     {
    15         scanf("%d",&u);
    16         x[u]=1;        
    17     }
    18     scanf("%d",&g);
    19     for(i=1;i<=g;i++)
    20     {
    21         scanf("%d",&u);
    22         y[u]=1;        
    23     }
    24     
    25     for(i=0;i<100000;i++)
    26     {
    27         sum=0;
    28         if(x[i%n]||y[i%m])
    29         {
    30             x[i%n]=1;
    31             y[i%m]=1;
    32         }
    33         
    34         for( j=0;j<n;j++)
    35         sum+=x[j];
    36         for(j=0;j<m;j++ )
    37         sum+=y[j];
    38         if(sum==(n+m))
    39         {
    40             flag=1;
    41             break;
    42         }
    43         
    44     }
    45     if(flag) printf("Yes
    ");
    46     else printf("No
    ");
    47 }
    View Code

    C

    题意:给出一个函数f(1234)=1!*2!*3!*4!=288=f(33222) 先将自变量拆成每一位的阶乘,通过类似上述的变换,怎样得到最大的新的自变量--

    思路是问来哒(≧▽≦)/

    观察到2!=2!;3!=3;4!=3!*2!*2!;

    然后可以联想到如果一个数位数占得越多,那么它就越大, 所以就将单独的数尽量拆成更小的数的阶乘,这样构成新的自变量的位数就越多,再把各个位上的数按由大到小的顺序输出----

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 using namespace std;
     6 int ss[100005];
     7 char str[20];
     8 int s[10][5]={{0},{0},{2},{3},{3,2,2},{5},{5,3},{7},{7,2,2,2},{7,3,3,2}};
     9 int cmp(int a,int b)
    10 {
    11     return a>b;
    12 }
    13 int main()
    14 {
    15     int  n,i,j,k=0;
    16     scanf("%d",&n);
    17     scanf("%s",&str);
    18     for(i=0;i<n;i++)
    19     {
    20         int a=str[i]-'0';
    21         for(j=0;s[a][j]!=0;j++)
    22         {
    23             ss[k]=s[a][j];
    24             k++;
    25         }    
    26     }
    27     sort(ss,ss+k,cmp);
    28     for(i=0;i<k;i++)
    29     printf("%d",ss[i]);
    30     printf("
    ");    
    31 }
    View Code
  • 相关阅读:
    刷题笔记
    布隆过滤器
    单例模式,堆,BST,AVL树,红黑树
    B树、B-树、B+树、B*树【转】,mysql索引
    数据结构与算法80道
    海量数据处理【转】
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
    volcanol的工控博客
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4295888.html
Copyright © 2011-2022 走看看