• Codeforces Round #269 (Div. 2)


    A

    题意:给出6根木棍,如果有4根相同,2根不同,则构成“bear”,如果剩余两个相同,则构成“elephant”

    用一个数组分别储存各个数字出现的次数,再判断即可

    注意hash[i]==5的时候,也算作bear,因为它也是满足了4根相同,2根不同

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<algorithm>  
    10 #define mod=1e9+7;
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 int  hash[1005],a[10];
    15 
    16 int main(){
    17     int i,j,ans=0;
    18     memset(hash,0,sizeof(hash));
    19     for(i=0;i<6;i++){
    20         cin>>a[i];
    21         hash[a[i]]++;        
    22     }
    23     
    24     int x=0,y=0;
    25     for(i=1;i<=9;i++){
    26         if(hash[i]){
    27             if(hash[i]==4||hash[i]==6||hash[i]==5) x=1;
    28             if(hash[i]==2||hash[i]==6) y=1;
    29         }
    30     }
    31     
    32     if(x&&y) printf("Elephant
    ");
    33 else     if(x==1&&y!=1) printf("Bear
    ");
    34 else printf("Alien
    ");
    35 }
    View Code

    B

    题意:给出n个数,按照从小到大的难度级别排序,问是否存在3种及三种以上这样的排序序列

    这一题自己没想出来,想得还很复杂= =觉得好乱= = 不过后来看了题解,

    发现这样就可以了,再用另一个b数组记录下来相同的数的位置,如果b数组的大小小于等于1,一定不满足

    反之,只要b数组里面有两个数,我们就可以通过交换这两个位置(本身排出来有一个序列,分别交换两个位置可以得到两个),得到3个排序序列

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<algorithm>  
    10 #define mod=1e9+7;
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int maxn=2000+5;
    15 int b[maxn];
    16 
    17 struct node{
    18     int h;
    19     int pos;    
    20 } a[maxn];
    21 
    22 int cmp(node n1,node n2){
    23     if(n1.h!=n2.h) return n1.h<n2.h;
    24     return n1.pos<n2.pos;
    25 }
    26 
    27 int main(){
    28     int n,i,j,cnt;
    29     cin>>n;
    30     for(i=1;i<=n;i++){
    31         cin>>a[i].h;
    32         a[i].pos=i;
    33     }
    34     
    35     sort(a+1,a+n+1,cmp);
    36     cnt=0;
    37     
    38     for(i=2;i<=n;i++){
    39         if(a[i].h==a[i-1].h){
    40             b[cnt++]=i-1;
    41         }
    42     }
    43     if(cnt<=1) printf("NO
    ");
    44     else{
    45         printf("YES
    ");
    46         for(i=1;i<n;i++)
    47         printf("%d ",a[i].pos);
    48         printf("%d
    ",a[i].pos);
    49         
    50         swap(a[b[0]],a[b[0]+1]);
    51         
    52         for(i=1;i<n;i++)
    53         printf("%d ",a[i].pos);
    54         printf("%d
    ",a[i].pos);
    55         
    56     //    swap(a[b[0]],a[b[0]+1]);//这个地方叫交不交换都可以,交换了即为将第一个位置的换回来,都是不一样的序列 
    57         swap(a[b[1]],a[b[1]+1]);
    58         
    59         for(i=1;i<n;i++)
    60         printf("%d ",a[i].pos);
    61         printf("%d
    ",a[i].pos);        
    62     }
    63     return 0;
    64 }
    View Code

    C

    题意:给出n个木棍,问能够搭成多少个不同高度的房子

    首先想到的是算怎样消耗最少并且能够搭起最高的房子,

    观察图可得:横杠之间有n个空隙,就会对应n+1个类似“八”的2根木棒,

    这里的第几层是从最高层往最低层数 所以

    第0层,0根横杠:1

    第1层,1根横杠::1+(1+1)*2 -

    第2层,2根横杠:2+(2+1)*2

    第i层,i根横杠:i+(i+1)*2=3*i+2

    即为满足这样的等差数列就可以消耗最小的房子

    然后求前i项和:i*2+(i*(i-1))/2=i*(3*i+1)/2

    然后就是自己的doubi思路:想的是,建成最高的了,然后就一层一层得往下拆,看可以拆成多少个高度不同的房子= =一直写不出来

    正确的应该是这样:从i=1开始枚举,枚举到i*(3*i+1)/2<=n,这样即为完成消耗最小的房子,

    又因为不能有木棒剩余,所以只能3根3根地加, 所以只需要满足n-(i*(3*i)+1)/2能够整除3即可

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<algorithm>  
    10 #define mod=1e9+7;
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 LL n;
    15 LL ans,tmp,row,sum=0;
    16 
    17 int main(){
    18     cin>>n;
    19     for(LL i=1;(tmp=(3*i+1)*i/2)<=n;i++){
    20         
    21         if((n-tmp)%3==0)
    22         ans++;
    23     }
    24     cout<<ans<<"
    ";
    25     return 0;    
    26 }
    View Code
  • 相关阅读:
    最全面的jdbcUtils,总有一种适合你
    如何彻底卸载Oracle?
    Spring框架之AOP
    【HIVE】(2)分区表、二级分区、动态分区、分桶、抽样
    【HIVE】(1)建表、导入数据、外部表、导出数据
    Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
    【HIVE & Spark】将hive引擎换成Spark,运行速度快!怎么换?请看本文
    【HIVE】hive的安装与使用教程
    【Hadoop】mapreduce环形缓冲区
    【Hadoop高级】Hadoop HA、hdfs安全模式
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4343601.html
Copyright © 2020-2023  润新知