2013.7.23 新人CF上水的6题

来源:互联网 发布:wps办公软件好用吗 编辑:程序博客网 时间:2024/04/26 08:19
CF133A 
大意:喵呜给了我一串字符串,让我判断那个字符串里面是否含有他预计给我的那几个字符当中的其中一个,H,Q,9这三个字符是有输出的 而+这个字符是木有输出的所以在判断的时候即使有+这个字符也不能被统计粗来 例如a+b=c 虽然有+这个字符但是我们得输出NO~那么这道题其实就水的不能再水了我是个渣渣所以就先从水题做起,这道题事先定义一个标志变量如果粗线H,Q,9 FLAG就++ 如果全部木有粗线 FLAG=0 输出NO 否则输出YES 代码如下
 
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int main(){   char s[1005];    cin>>s;    int i,len,flag=0;    len=strlen(s);    for(i=0;i<len;i++)    {        if(s[i]=='H'||s[i]=='Q'||s[i]=='9')        flag++;    }    if(flag==0)    cout<<"NO"<<endl;    else    cout<<"YES"<<endl;    return 0;}
 
CF96A
大意:喵呜是一个优秀的守门员所以他也对每个球队的球员配置是非常重视的,他知道每个位置上的球员不能过多,所以得合理安排阵型如果某个位置上超过了七个人那么这场比赛球队将会很危险,我们用0和1表示某个位置上的人数 例如0000011111,一开始有5个0就说明第一个位置上有五个人,接着有5个1就说明第二个位置上有五个人这两个位置上的人都小于7个人 所以球队木有危险。 然而011111110这一串数字代表第二个位置上有七个人那么球队就有危险了,题目就是给你一串0和1构成的字符串统计连续的0或者1是否超过了7个的问题。代码如下
 
#include<stdio.h>#include<iostream>#include<string.h>using namespace std;
int main(){   char s[105];    char a;    cin>>s;    a=s[0];//先确定第一个字符是啥用来接下来的统计连续的数字    int i,len,count=1;    len=strlen(s);    for(i=1;i<len;i++)    {        if(s[i]==a)//如果后面的字符跟它相等就自增1,大于等于7跳出        {            count++;            if(count>=7)            {                 cout<<"YES"<<endl;                 break;            }
        }        else        {            a=s[i];//如果不相等就重新赋值并把统计的数归1            count=1;        }    }    if(count<7&&i==len)    cout<<"NO"<<endl;    return 0;
}
 
CF160A
大意:喵呜给他的两个小伙伴留下几堆硬币吃午饭,两个小伙伴都在碎叫,其中一个小伙伴醒来了先看到了这些钱,这个小伙伴想出了一个方法那就是选取尽可能少的硬币还能使他拿到的硬币比总数的一半要多,并求出这个小伙伴应该拿走喵呜的几堆硬币。额 由于喵呜这个人很随意所以硬币堆价值不等,而且是混乱的,那么这个小伙伴要拿尽可能少的硬币必然是得从硬币价值高的开始拿起(这个在CF上貌似提示为贪心。。。)并统计他拿了多少个就好了,代码如下。
 
#include<stdio.h>#include<algorithm>using namespace std;
int main(){    int n;    scanf("%d",&n);    int i,sum1=0,sum2=0,count=0;    int a[105];    for(i=0;i<n;i++)    {        scanf("%d",&a[i]);        sum1+=a[i];    }    sort(a,a+n);//将混乱的硬币堆按照从小到大快速排序    for(i=n-1;i>=0;i--)//从价值最多的开始拿并用COUNT统计拿了多少个。。。    {        sum2+=a[i];        count++;        if(sum2>sum1/2)        break;    }    printf("%d\n",count);    return 0;
 
}
CF228A
大意:喵呜很喜欢各种运动鞋,他总喜欢有四双不同的运动鞋,下面给了先我们4种鞋子,然后求出还需要几种鞋子能够与上述四种鞋子构成四种样式,额还是很水,例如1 7 3 3就说明有三种样式的鞋子1 7 3 还需要1种就可以配成四对不同的鞋子,而7 7 7 7只有一种样式所以需要三种新样式构成四对不同的鞋子,那么这道题的思路很简单了当然因为输入的数字又是没有顺序的快排可以从小到大把数字存进去然后又依次判断,凡是a[i]=a[i+1]则得多买一双鞋否则又把值赋给新出现的样式并继续判断。代码如下
 
#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;
int main(){   int i;    int a[10];    for(i=0;i<4;i++)    scanf("%d",&a[i]);    sort(a,a+4);    int b,count=0;    b=a[0];    for(i=1;i<4;i++)    {        if(b==a[i])       count++;        else        b=a[i];    }    cout<<count<<endl;
    return 0;}
CF144A
大意:喵呜给人排队 然后他不喜欢从高到低或者从低到高排,他只想让最高的人站第一个让最矮的人站最后一个就可以了,而且只能前后两个人交换,交换次数越少越好,并让你求出交换的最小次数 例如10 10 12 18 只要让最大的18跟前面的三个数分别交换就可以了,然后由于最小的数10 10有两个,我们让后面那个跟接下来数来交换必然比第一个数要来的更为快捷些,所以这道题就得先找到最大最小元素在哪,当然有一个地方要注意的就是当你发现最大的元素在最小的元素后面的时候统计次数应该多减去1次因为有一次重复了。。而最大元素在最小元素前面则无重复。。。代码如下
 
#include<iostream>#include<stdio.h>
using namespace std;
int main(){    int n;    cin>>n;    int i,max=0,min=100,b,c;    int a[105];    for(i=0;i<n;i++)    {        cin>>a[i];        if(min>=a[i]) {min=a[i];b=i+1;}//最小的数越靠后越好 并寻找到位置 注意实际位置得+1        if(max<a[i]) { max=a[i];c=i+1;}//最大元素越靠前越好 并寻找到位置 注意实际位置得+1
    }    if(b<c)    cout<<c-2+n-b<<endl;//如果最大元素在最小元素后面 如10 10 12 它跟第二个10交换1次后一个10就已经到    else                //最后了所以不用再重复一次了,故为大数位置减去首位置1再减去1加上末位置减去小数    cout<<c-1+n-b<<endl;//如果在前面则不用减去上面重复的1咯~
    return 0;}
 
CF110A
大意:喵呜的幸运数字是4和7,所以他把含4和7的数称之为幸运数如447 77474 都是幸运数,可是有一天他对这个幸运数有了更严苛的规定 就是这个数不但得含有4和7且一共含有4和7的总个数也要为4和7才能成为喵呜的新幸运数字,例如4,7都不是新幸运数了因为它们幸运数字不为4或7而447400则是新幸运数,给你一个数字让你判断他是不是喵呜的新幸运数。千万注意数字很大要用longlong 存啊 一开始用 int 存 WA了几次T T。代码如下
 

#include<iostream>

using namespace std;int main(){  long long  n;    cin>>n;    int c=0,i;    while(n)    {        i=n%10;        if(i==4||i==7)

             c++;

          n=n/10;

 

    }

    if(c==4||c==7)    cout<<"YES"<<endl;    else    cout<<"NO"<<endl;

 

    return 0;}

 
 

原创粉丝点击