Comet OJ - Contest #4

题目指路:https://www.cometoj.com/contest/39
就写了一道签到题,第二题死活想不出来,真的丢人
附上大佬的题解:https://www.cnblogs.com/JHSeng/p/10920645.html

A、(签到题)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){
    int t,a[6],b[20];
    cin>>t;
    while(t--){
        int max=0;
        int j;
        memset(b,0,sizeof(b));
    for(int i=0;i<5;i++){
        cin>>a[i];
        if(a[i]==1) b[1]++;
        if(a[i]==2) b[2]++;
        if(a[i]==3) b[3]++;
        if(a[i]==4) b[4]++;
        if(a[i]==5) b[5]++;
        }
    for(int i=1;i<=5;i++)
    {
    if(max<b[i]){
        max=b[i];
        j=i;
        } 
    }
    cout<<j<<endl;
    }

    return 0;   
}

B、奇偶性(找规律题)

理解题意花了好多时间,结果告诉我居然是找规律?!
感谢大佬的思路:https://www.cnblogs.com/Carered/p/10920590.html
附上我的超时代码,起码也是能整出来的,以后作为教训吧,不要老是想着直球。。。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=100;
int a[maxn];

int main(){
    int t,l,r,k,sum;
    int prom;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&l,&r,&k);
        sum=0;
        memset(a,0,sizeof(a));
        a[0]=1;
        for(int i=l;i<=r;i++){
            for(int j=1;j<=k;j++){
                if(i<k) 
                    a[i]=1;
                else 
                    a[i]+=a[i-j];
            }
                prom=a[i]%2;
                sum+=prom;
                //printf("%d %d",prom,sum);
                
        }
    //  for(int i=l;i<=r;i++)
    //  printf("%d ",a[i]);
        printf("%d\n",sum); 
    }
    return 0;   
}

AC代码:(来自 https://www.cnblogs.com/JHSeng/p/10920645.html

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    long long l,r,k;
    cin >> n;
    while(n--)
    {
        scanf("%lld%lld%lld",&l,&r,&k);
        long long ans = 0;
        if(k % 2 == 0)
        {if(k >= r)
            {
                if(r == k)
                    ans = r - l;
                else
                ans = r - l + 1;
            }
            else if(k < l)
            {
                long long ll,rr;
                ll = l - ((l - k) / (k + 1) + 1);
                rr = r - ((r - k) / (k + 1) + 1);
                ans = rr - ll + 1;
            }
            else
            {
                ans = r - ((r - k) / (k + 1) + 1) - l + 1;
                if(l == k) ans += 1;
            }
        }
        else
        {
            ans = r - l + 1;
        }
        printf("%lld\n",ans);
    }
    return 0;
}

剩下的题目有空再补
虽然我觉得有空是不太可能了,嘛还是看看大佬的题解度日好了

全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务