zoukankan      html  css  js  c++  java
  • BestCoder Round #36

    HDU5198 Strange Class

    问题描述
    在Vivid的学校里,有一个奇怪的班级(SC).在SC里,这些学生的名字非常奇怪。他们的名字形式是这样的anbncn(a,b,c两两不相同。).例如,叫”abc”,”ddppqq”的学生是在SC里的,然而叫”aaa”,”ab”,”ddppqqq”的同学并不是在SC里的。
    Vivid交了许多的朋友,他想知道他们之中哪些人是在SC里的。
    输入描述
    多组测试数据(大概10组),每一个数据在一行中给出一个字符串S,代表Vivid一个朋友的名字。
    请处理到文件末尾。
    
    [参数约定]
    1|S|10.
    |S| 是指S的长度.
    S 只包含小写字母.
    输出描述
    对于每一个数据,如果Vivid的朋友是SC里的,那么输出YES,否则输出NO。
    输入样例
    abc
    bc
    输出样例
    YES
    NO

    思路:模拟就行,这场比赛题目都很水

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstring>
     5 #define maxn 1000
     6 using namespace std;
     7 char ch[maxn],cha[10];
     8 int a[10];
     9 int main()
    10 {
    11     int n;
    12     while(scanf("%s",ch+1)!=EOF)
    13     {
    14         memset(a,0,sizeof(a));
    15         int len=strlen(ch+1);
    16         cha[1]=ch[1];
    17         for(int i=1;i<=len;i++)
    18         {
    19             if(ch[i]==cha[1])a[1]++;else break;
    20         }
    21         cha[2]=ch[a[1]+1];
    22         for(int i=a[1]+1;i<=len;i++)
    23         {
    24             if(ch[i]==cha[2])a[2]++;else break;
    25         }
    26         cha[3]=ch[a[2]+a[1]+1];
    27         for(int i=a[1]+a[2]+1;i<=len;i++)
    28         {
    29             if(cha[3]==ch[i])a[3]++;else break;
    30         }
    31         if(a[1]+a[2]+a[3]!=len){puts("NO");continue;}
    32         if(a[1]!=a[2] || a[2]!=a[3] || a[1]!=a[3]){puts("NO");continue;}
    33         if(cha[1]==cha[2] || cha[1]==cha[3] || cha[2]==cha[3]){puts("NO");continue;}
    34         puts("YES");
    35     }
    36     return 0;
    37 }
    View Code

    HDU5199 Gunner

    问题描述
    很久很久以前,有一个叫Jack的枪手。他非常喜欢打猎。一天,他去了一个小树林。那儿有n只鸟,还有n棵树。第i只鸟站在第i棵树的顶端。这些树从左到右排成一条直线。每一棵树都有它的高度。Jack站在最左边那棵树的左边。当Jack在高度为H的地方向右发射一棵子弹时,站在高度为H的树上的鸟儿就会落下来。
    Jack会射击多次,他想知道每次射击会有多少鸟儿落下来。
    输入描述
    多组测试数据(大概5组),每一组的第一行给出n,mn表示有n棵树和n只鸟,m表示Jack会射击m次。
    在第二行,有n个整数, h[1],h[2],h[3],,h[n]表示这些树的高度。
    在第三行,有m个整数, q[1],q[2],q[3],,q[m]表示Jack射击的高度。
    
    [参数约定]
    1n,m1000000(106)
    1h[i],q[i]1000000000(109)
    输出描述
    对于每一个q[i],在一行中输出Jack射落了几只鸟。
    输入样例
    4 3
    1 2 3 4
    1 1 4
    输出样例
    1
    0
    1

    思路:大水体啊啊啊啊啊啊,map就可以过,我求穩作死敲了个hash,慢了别人好多TUT

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #define maxn 1000009
     5 #define MOD 10000009
     6 using namespace std;
     7 int head[MOD+10],nex[maxn],a[maxn],value[maxn];
     8 long long point[maxn],now=0;
     9 long long n,k;
    10 int add(int x,int y)
    11 {
    12     nex[++now]=head[x];
    13     head[x]=now;
    14     point[now]=y;
    15     value[now]=1;
    16 }
    17 void insert(long long x)
    18 {
    19     long long u=x%MOD;if(u<0)u*=-1;
    20     for(int i=head[u];i;i=nex[i])
    21     {
    22         if(point[i]==x){value[i]++;return;}
    23     }
    24     add(u,x);
    25 }
    26 int find(int x)
    27 {
    28         int u=x%MOD;if(u<0)u*=-1;
    29     for(int i=head[u];i;i=nex[i])
    30     {
    31         if(point[i]==x){int u=value[i];value[i]=0;return u;}
    32     }
    33     return 0;
    34 }
    35 int read()
    36 {
    37     int x=0,f=1;char ch=getchar();
    38     while(ch<'0'||ch>'9'){ch=getchar();}
    39     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    40     return x*f;
    41 }
    42 int main()
    43 {
    44         int n,m,h,q;
    45         while(scanf("%d%d",&n,&m)!=EOF)
    46         {
    47                 now=0;
    48                 memset(head,0,sizeof(head));
    49                 memset(value,0,sizeof(value));
    50                 for(int i=1;i<=n;i++)
    51                 {
    52                         h=read();
    53                         insert(h);
    54                 }
    55                 for(int i=1;i<=m;i++)
    56                 {
    57                         q=read();
    58                         int u=find(q);
    59                         printf("%d
    ",u);
    60                 }
    61         }
    62         return 0;
    63 }
    View Code

    HDU5200 Trees

    问题描述
    今天CodeFamer去坎树。有N棵树排成一排。他们被从1N标号。第i号树的高度为hi。两棵未被坎掉的树编号分别为x,y当且仅当他们满足如下条件中一条时,他们是属于同一个块的:
    1) x+1=y 或 y+1=x;
    2) 存在一个棵未被坎掉的树,编号为zxz在同一个块并且yz也在同一个块。
    现在CodeFamer想要坎掉一些高度不大于某个值的树,坎掉之后会形成多少个块呢?
    输入描述
    多组测试数据(大概15组)
    对于每一组数据,第一行包含两个整数NQ,以一个空格分开,N表示有N棵树,Q表示有Q个查询。
    在接下来的N行中,会出现h[1],h[2],h[3],,h[N],表示N棵树的高度。
    在接下来的Q行中,会出现q[1],q[2],q[3],,q[Q]表示CodeFamerr查询。
    
    请处理到文件末尾。
    
    [参数约定]
    1N,Q50000
    0h[i]1000000000(109)
    0q[i]1000000000(109)
    输出描述
    对于每一个q[i],输出CodeFamer坎掉高度不大于q[i]的树之后有多少个块。
    思路:离线输入,对于每个在范围内的树砍掉,维护块数就可以了,一开始想用并查集维护的,后来发现根本不用
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstring>
     5 #define maxn 60000
     6 using namespace std;
     7 int ansc=0,ans[maxn],father[maxn],visit[maxn];
     8 struct T
     9 {
    10     int x;int y;
    11 }q[maxn],a[maxn];
    12 int cmp(T x,T y)
    13 {
    14     return x.x>y.x;
    15 }
    16 int cmp2(T x,T y)
    17 {
    18     return x.x<y.x;
    19 }
    20 
    21 int main()
    22 {
    23     int n,qi;
    24     while(scanf("%d%d",&n,&qi)!=EOF)
    25     {
    26                 memset(visit,0,sizeof(visit));
    27         ansc=0;
    28         for(int i=1;i<=n;i++)father[i]=i;
    29         for(int i=1;i<=n;i++)
    30         {
    31             scanf("%d",&a[i].x);
    32             a[i].y=i;
    33         }
    34         sort(a+1,a+1+n,cmp);
    35         for(int i=1;i<=qi;i++)
    36         {
    37             scanf("%d",&q[i].x);
    38             q[i].y=i;
    39         }
    40         sort(q+1,q+1+qi,cmp);
    41         int u=1;
    42         for(int i=1;i<=qi;i++)
    43         {
    44             while(a[u].x>q[i].x && u<=n)
    45             {
    46                 visit[a[u].y]=1;
    47                 ansc++;
    48                 if(visit[a[u].y-1])ansc--;
    49                 if(visit[a[u].y+1])ansc--;
    50                 u++;
    51             }
    52             ans[q[i].y]=ansc;
    53         }
    54         for(int i=1;i<=qi;i++)printf("%d
    ",ans[i]);
    55     }
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    雷少东_百度百科
    180China丨the Agency for Brand Engagement and Experience
    建立可信连接
    【行业干货】2013中国零售商排名
    30万左右买什么车好?_百度知道
    极速入职-拉勾网-专注互联网职业机会
    python
    关于幂律分布的一个笔记_哈克_新浪博客
    幂律分布_百度百科
    使用firefox直接 打开pdf文件可以破解禁止打印的功能
  • 原文地址:https://www.cnblogs.com/philippica/p/4393050.html
Copyright © 2011-2022 走看看