#19ACM第五次周赛补题赛de题解呐#

磕出来的所有题 唉……


A.防AK题目——超难系列

这是一道Hello word题,题面花里胡哨,但就想让你输出一个“Accepted!!!”。

#include
int main(){
   
    printf("Accepted!!!");
    return 0;
}

B.Fenoix超厌恶xxx

这一题呢判断几种可能情况来进行即可,先看题面:

描述:
Fenoix觉得xxx是一个非常怪的人,因为他特别厌恶xxx这样的人。
现在他给你出一道有关xxx的题目,让你去把xxx消灭了。
如果一个文件名中一行包含三个或更多“x”(小写拉丁字母“x”),则他需要你把存在xxx的情况去除。
他给出的文件名中要求你删除的最少字符数,以便在文件名之后不再包含“xxx”作为子字符串。
如果文件名最初不包含禁止的子字符串“xxx”,则打印0。
您可以删除任意位置的字符(不一定是连续的)。如果删除一个字符,则字符串的长度将减少1。
例如,如果从字符串“exxxll”中删除从左到右第2个位置中的字符,则得到的字符串是“exxII”。
Fenoix说这个可是送分题哟~
输入:
第一行包含整数n(3≤n≤100-表示文件名的长度。
第二行包含一个长度为n的字符串,该字符串仅由小写拉丁字母(文件名)组成。
输出:
打印要从文件名中删除的最小字符数,使文件名后面不包含“xxx”作为子字符串。
如果文件名最初不包含禁止的子字符串“xxx”,则打印0。
输入样例 1                      输出样例 1
6                              1
xxxiii

若有3个连续的x则去掉一个,若有连续三个以上的x,为了确保去完后剩余的连续x数小于3,
则去掉的个数为连续的总数减2。

#include
int main()
{
   
    int i,j,n,m=0,num=0,sum=0;
    char s[10005];
    scanf("%d",&n);
    scanf("%s",s);
    i=m;
    while(i<n)
    {
   
        num=0;
        if(s[i]=='x')
        {
   
            num+=1;
            for(j=i+1;j<n;j++)
            {
   
                if(s[j]=='x')
                {
   
                    num+=1;
                    if(j==n-1)
                    {
   
                        sum+=num-2;
                        break;
                    }
                }
                else if(s[j]!='x')
                {
   
                    if(num==3)
                    {
   
                         sum+=1;
                    }
                    else if(num>3)
                    {
   
                        sum+=num-2;
                    }
                    break;
                }
            }
            i=j;
        }
        else
        {
   
            i=i+1;
        }
    }
    printf("%d\n",sum);
    return 0;
}

C.lwm学姐的木屋

题目:

描述
lwm学姐决定为她的木屋做一个新的屋顶,他有n个矩形木板,编号从1到n。度为1,
高度为第i个木板的尺寸为ai×1(即宽ai)。现在,lwm学姐想做一个方形屋顶。
他先挑选一些厚木板,把它们按一定的顺序并排放在一起。然后他会把这些木板的垂直边粘在一起。
最后,他将从最终形状中切出一个正方形,使正方形的边长是水平和垂直的。
例如,如果lwm学姐有长度为43145的木板,他可以选择长度为435的木板。
然后他可以切出一个3×3的正方形,这是最大的可能。注意,这不是他得到3×3正方形的唯一方法。
lwm学姐能得到的最大边长是多少?
输入:
输入的第一行包含一个整数k(1≤k≤10),即输入的测试用例的数量。
对于每个测试用例,第一行包含一个整数n(1≤n≤1000),lwm学姐存储的木板数量。
下一行包含n个整数a1,…,an(1≤ai≤n),即板材的长度。
输出:
对于每个测试用例,输出一个整数,即正方形的最大可能边长。
输入样例 1                           输出样例 1
4                                   3
5                                   4
4 3 1 4 5                           1
4                                   3
4 4 4 4
3
1 1 1
5
5 5 1 1 5

由题意可知,多少块板即为所拼图形的宽,将所有长度的板子进行从长到短排序后,依次增加宽,若累加的宽等于循环到的长度,则所得宽即为最大正方形的边长,若小于,则所得宽减1即为最大正方形的边长,若大于则继续循环,看代码实现:

#include
#include
using namespace std;
#define hhh 100005
int a[hhh];
bool cmp(int b,int c){
   
    return b>c;
}
int main(){
   
    int k,n;
    scanf("%d",&k);
    while(k--){
   
        scanf("%d",&n);
        for(int i=0;i<n;i++){
   
            scanf("%d",&a[i]);
        }
        sort(a,a+n,cmp);
        int sum=1;
        for(int i=0;i<n;i++){
   
            if(a[i]==sum){
   
                printf("%d\n",sum);
                break;
            }
            else if(a[i]<sum){
   
                printf("%d\n",sum-1);
                break;
            }
            sum++;
        }
    }
    return 0;
}

D.Fenoix的趣事

看题目:

描述:
Fenoix非常喜欢看足球,又超喜欢把生活中的事情与学习和算法联系起来。一天,当他正在看
足球比赛时,他正在一张纸上写下球员们目前的位置。于是就想了一道题目来为难作为新生的你。
为了简化这种情况,他把它描绘成一个由01组成的字符串。
0对应一个队的队员;1对应另一个队的队员。如果一个队中至少有7名队员一个接一个地站着,
那么这种情况就被认为是危险的。例如,情况00110111111101是危险的,而11110111011101不是。
现在的情况是这样的,需要你确定它是否危险。
输入:
第一个输入行包含一个由字符“

你可能感兴趣的:(秃头hua的题解)