第五次周赛总结

原题链接

防AK题目——超难系列

第五次周赛总结_第1张图片
嗯,看了题目,确实挺长,挺难的。嗯,说的很对。所以,就输出Accepted吧!

#include 
#include 

int main()
{
    printf("Accepted!!!\n");
    return 0;
}

Fenoix超厌恶xxx

第五次周赛总结_第2张图片
仔细读题可知,其实就是统计连续的 x 的大于 2 次的那一部分的次数。
代码

#include 
#include
#include
#include
using namespace std;
int main()
{
    char a[200];
    int n,i,ans=0;
    int flog=0;
    scanf("%d",&n);
    scanf("%s",a);
    for(i=2; i<n; i++)
    {
        if(a[i-1]=='x'&&a[i-2]=='x'&&a[i]=='x')
        {
            ans++;
            flog=1;
        }
    }
    if(flog==1)
        printf("%d",ans);
    else printf("0");
    return 0;
}

lwm学姐的木屋

第五次周赛总结_第3张图片
因为题目说的是最大的正方形,所以就从输入的木块的数量 n 开始, n 依次减一,并判断是否在输入的这么多的木块中,存在有大于 n 的木块数量。如果存在,则输出 n。
代码

#include 
#include
#include
#include
using namespace std;
int main()
{
    int k,i,a[10005],n,j;
    scanf("%d",&k);
    while(k--)
    {
        scanf("%d",&n);
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
            for(i=n; i>0; i--)
        {
            int ans=0;
            for(j=0; j<n; j++)
            {
                if(a[j]>=i)
                    ans++;
            }
            if(ans>=i)
            {
            printf("%d\n",i);
                break;
            }
        }
    }
    return 0;
}

Fenoix的趣事

第五次周赛总结_第4张图片
此题就是判断是否有 7 个相同的 1 或者 0。
代码

#include 
#include
#include
#include
using namespace std;
int main()
{
    char a[100005];
    scanf("%s",a);
    int x=strlen(a);
    int i,flog=0;
    for(i=6;i<x;i++)
    {
        if(a[i-1]=='0'&&a[i-2]=='0'&&a[i-3]=='0'&&a[i-4]=='0'&&a[i-5]=='0'&&a[i-6]=='0'&&a[i]=='0')
        {
            flog=1;
            printf("YES\n");
            break;
        }
        else if(a[i-1]=='1'&&a[i-2]=='1'&&a[i-3]=='1'&&a[i-4]=='1'&&a[i-5]=='1'&&a[i-6]=='1'&&a[i]=='1')
        {
            flog=1;
            printf("YES\n");
            break;
        }
    }
    if(flog==0)printf("NO\n");
    return 0;
}

Fenoix的签到题

第五次周赛总结_第5张图片
其实就是寻找连续的递增的数的最大数量
代码

#include 
#include
#include
#include
using namespace std;
int main()
{
    int n,ans=1,i;
    long long a[100005],maxa=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%lld",&a[i]);
    for(i=1;i<n;i++)
    {
        if(a[i]<=a[i-1])
            ans=1;
        else ans++;
        if(ans>maxa)
            maxa=ans;
    }
    printf("%lld",maxa);
    return 0;
}

cgy学长爱吃糖果

第五次周赛总结_第6张图片
如果糖果总数是奇数的话肯定吃不完,如果是偶数的话,如果最大的糖果数大于总数的一半肯定吃不完,其他的都可以。
代码

#include 
#include
#include
#include
using namespace std;

int main()
{
    int n,t,i;
    int a[100005];
    scanf("%d",&t);
    while(t--)
    {
        int sum=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        if(sum%2==1)
            printf("****!!!\n");
        else
        {
             sort(a,a+n);
            if(a[n-1]>sum/2)
                printf("****!!!\n");
            else
                printf("NICE!!!\n");
        }
    }
    return 0;
}

来呀,贪心呀~

第五次周赛总结_第7张图片
这个就是贪心的例题
代码

#include 
#include
#include
using namespace std;
struct nod
{
    int s,e;
}v[100005];
bool cmp(nod x,nod y)
{
    if(x.e==y.e)
        return x.s>y.s;
    return x.e<y.e;
}
int main()
{
    int m;
    scanf("%d",&m);
    while(m--)
    {
        int i,n;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d%d",&v[i].s,&v[i].e);
            sort(v,v+n,cmp);
        int ans=1,t=0;
        for(i=1;i<n;i++)
        {
            if(v[i].s>v[t].e)
            {
                ans++;
                t=i;
            }
             }
        printf("%d\n",ans);
    }
    return 0;
}

说是栈你会做么?

第五次周赛总结_第8张图片
这道题就是用栈做的( 他题目说的哟~ )如果有 a 又有一个 b,那么就出栈。最后判断一下栈是否为空即可。
代码

#include 
#include
#include
#include
#include
using namespace std;

int main()
{
    char a[1005];
    int i;
    stack<char>q;
    scanf("%s",a);
    int x=strlen(a);
    q.push(a[0]);
    for(i=1;i<x;i++)
    {
        if(!q.empty()&&a[i]=='b'&&q.top()=='a')
            q.pop();
        else
            q.push(a[i]);
    }
    if(!q.empty())
        printf("Bad");
    else printf("Good");
    return 0;
}

我太难了

第五次周赛总结_第9张图片
题意很简单,就是求阶乘。
代码

#include 
#include 
int main()
{
    long long  t,i,n;
    scanf("%lld",&t);
    while(t--)
    {
    long long a=1;
        scanf("%lld",&n);
        for(i=1;i<=n;i++)
        {
            a*=i;
        }
        printf("%lld\n",a);
    }
    return 0;
}

我也太难了

第五次周赛总结_第10张图片
本题就是求斐波那契数,只不过数比较大,需要用递归的记忆化来优化一下。
代码

#include 
#include
using namespace std;
long long v[100005];
long long pass(long long x)
{
    if(v[x])
        return v[x];
    if(x==1||x==2)
        return 1;
    return v[x]=pass(x-1)+pass(x-2);
}
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%lld",pass(n));
        printf("\n");
    }
    return 0;
}

Fenoix的针对

第五次周赛总结_第11张图片
来了,来了,二维数组(矩阵)又来了。令人头疼的线代。把整个矩阵分成两个三角形,再寻找规律输出即可。
代码

#include 
#include 
#include
#include
int main()
{
    int n,i,j,k,l,kk,ll;
    while(~scanf("%d",&n))
    {
        for(i=0; i<n; i++)
        {
            k=(i+1)*(i+1);
            l=i*i;
            for(j=i; j>=0; j--)
            {
            if(i%2==1)
                {
                    printf("%2d ",k);
                    k--;
                }
                else
                {
                    printf("%2d ",l+1);
                    l++;
                }
            }
            for(j=i+1; j<n; j++)
            {
                kk=(j+1)*(j+1)-i;
                ll=j*j+1+i;
                if(j%2==0)
                    printf("%2d ",kk);
                else
                    printf("%2d ",ll);
            }
            printf("\n");
        }
        printf("\n");
    }
    return 0;
}

来自Fenoix的刁难

第五次周赛总结_第12张图片
就是数组元素的删除,用 for循环遍历即可。
代码:

#include 
#include
#include
#include
using namespace std;
int main()
{
    int n,i,j,a[1000];
    int ans=0;
    scanf("%d",&n);
    for(i=n-1; i>=0; i--)
        scanf("%d",&a[i]);
    for(i=0; i<n; i++)
    {
        for(j=i+1; j<n; j++)
        {
            if(a[j]==a[i])
            {
                a[j]=0;
            }
        }
    }
    for(i=0; i<n; i++)
    {
        if(a[i]!=0)
            ans++;
    }
    printf("%d\n",ans);
    for(i=n-1; i>=0; i--)
    {
        if(a[i]!=0)
            printf("%d ",a[i]);
    }
    return 0;
}

你可能感兴趣的:(周赛)