一道c语言题,希望大神能给出代码,注意,不要超时(2000ms)

2025-04-26 00:47:48
推荐回答(1个)
回答1:

if (k>n) k=n;

只要加上这一句,你就不会超时了。这句话的意思是,如果有一个人能打败其他所有人,那这个人打多少场都能赢。

#include 

int max(int a, int b) {
    return a>b?a:b;
}
int min(int a, int b) {
    return a}

int main() {
    int n;
    long long k;
    scanf("%d %I64d", &n, &k);
    if (k>n) k=n;
    int a[1111];
    int i;
    for (i=0; i    int count=-1, ans=-1;
    for (i=0; i        a[n++]=min(a[i], a[i+1]);//失败者去最后
        a[i+1]=max(a[i], a[i+1]);//胜利者进入下一轮
        if (ans==a[i+1]) count++;//连续胜利
        else {                   //新人获胜
            ans=a[i+1];
            count=1;
        }
        if (count==k) break;     //获胜k次结束
    }
    printf("%d\n", ans);
    return 0;
}