zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 104

    传送门

    A. Arena (*800)

    题意

    (n(2leq nleq 100))个人,每人初始有一个能力值(a_i),每次可以随意选择两个人进行一场比赛,能力值高的人能力值加一,当一个人至少赢了(100^{500})场比赛时,他就是冠军,计算可能成为冠军的人数

    题解

    对于能力值为(a_i)的人,如果没有人能力值比他小,那么他无法赢得任何比赛,所以无法成为冠军。反之,只要有任何一个人的能力值比他小,他就可以不断和这个人进行比赛,从而成为冠军。所以答案为总人数减去(a_i)最小的人数

    #include<bits/stdc++.h>
    #define LL long long
    #define PII pair<int,int>
    #define eps 1e-6
    #define lowbit(x) x&(-x)
    using namespace std;
    
    const int maxn=110;
    int T,n,a[maxn];
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            for(int i=1;i<=n;i++) scanf("%d",&a[i]);
            sort(a+1,a+1+n);
            int ans=(a+1+n)-upper_bound(a+1,a+1+n,a[1]);
            printf("%d
    ",ans);
        }
    }
    

    B. Cat Cycle (*1200)

    题意

    有两只猫(A)(B)(n(2leq nleq 1e9))块它们睡觉所在的毛绒布,这两只猫每小时都会更换睡觉所在地,循环更换:
    对于(A),循环顺序为(n,n-1,,n-2,cdots ,3,2,1,n,n-1,cdots)
    对于(B),循环顺序为(1,2,3,cdots ,n-1,n,1,2,cdots)
    由于(A)更年长,所以当(A)(B)刚好要睡同一块毛绒布时,(A)睡这块毛绒布,(B)睡它的顺序里的下一块毛绒布
    给出小时数(k(1leq kleq 1e9)),计算经过(k)个小时之后(B)位于的毛绒布编号

    题解

    如果(n)是偶数,则(A)(B)不会在同一块毛绒布上相遇,可以通过(k\% n)计算(B)的位置
    如果(n)是奇数,则每经过(lfloor frac{2}{n} floor)步,(B)就会比(A)多走(1)步,可以通过((k+lfloor frac{2}{n} floor)\% n)计算(B)的位置

    #include<bits/stdc++.h>
    #define LL long long
    #define PII pair<int,int>
    #define eps 1e-6
    #define lowbit(x) x&(-x)
    using namespace std;
    
    int T;
    LL n,k;
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%lld %lld",&n,&k);
            k--;
            if(n%2==0){
                printf("%lld
    ",k%n+1);
            }
            else{
                LL f=n/2;
                k+=k/f;
                printf("%lld
    ",k%n+1);
            }
        }
    }
    

    C. Minimum Ties (*1500)

    题意

    (n(2leq nleq 100))支队伍,两两之间进行一场比赛,一共进行(frac{n(n-1)}{2})场比赛。胜者得(3)分,败者得(0)分,平局双方各得(1)分。构造一种每局的胜败情况,使得所有比赛结束之后所有队伍的分数相同并且平局数量最少

    题解

    case 1: (n)为奇数。每支队伍需要进行((n-1))场比赛,((n-1))为偶数,所以只要每支队伍胜(frac{(n-1)}{2})场,负(frac{(n-1)}{2})场,则不需要平局。具体构造方法是将所有队伍按照编号围成一个圆圈,每支队伍与之后(frac{(n-1)}{2})支队伍的比赛结果为胜,与再之后(frac{(n-1)}{2})支队伍的比赛结果为负

    case 2: (n)为偶数。如果所有(frac{n(n-1)}{2})场比赛全都不是平局,则总得分为(frac{3n(n-1)}{2}),无法整除(n),所以需要平局,平局数量最少为(frac{n}{2})。具体构造方法是将所有队伍按照编号围成一个圆圈,每支队伍与之后(frac{(n-2)}{2})支队伍的比赛结果为胜,与之后第(frac{n}{2})支队伍的比赛结果为平局,与再之后(frac{n(n-2)}{2})支队伍的比赛结果为负

    #include<bits/stdc++.h>
    #define LL long long
    #define ULL unsigned long long
    #define PII pair<int,int>
    #define PLL pair<LL,LL>
    #define PLI pair<LL,int>
    #define pi acos(-1.0)
    #define eps 1e-6
    #define lowbit(x) x&(-x)
    using namespace std;
    
    int T,n;
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            if(n&1){
                for(int i=1;i<=n;i++){
                    for(int j=i+1;j<=n;j++){
                        if(j-i<=n/2) printf("1");
                        else printf("-1");
                        if(i==n-1 && j==n) printf("
    ");
                        else printf(" ");
                    }
                }
            }
            else{
                for(int i=1;i<=n;i++){
                    for(int j=i+1;j<=n;j++){
                        if(j-i<n/2) printf("1");
                        else if(j-i==n/2) printf("0");
                        else printf("-1");
                        if(i==n-1 && j==n) printf("
    ");
                        else printf(" ");
                    }
                }
            }
        }
    }
    

    D

    题意

    给出(n(1leq nleq 1e9)),计算有多少组((a,b,c))满足
    ( left{ egin{matrix} 1leq aleq bleq cleq n\ c^2=a^2+b^2\ c=a^2-b\ end{matrix} ight. )

    题解

    (a^2)代换,得到(b^2+b=c^2-c),即为(b(b+1)=c(c-1)),也就是(c=b+1),所以(2leq cleq n)。将(b=c-1)代入(a^2=b+c),得到(a^2=2c-1),所以(a)为奇数,由于(aapprox sqrt{c} leq sqrt{n}),所以可以枚举(a),时间复杂度(O(sqrt{n}))。也可以直接推出式子得到答案:(ans=frac{sqrt{2n-1}+1}{2}-1),时间复杂度(O(1))
    (O(sqrt{n}))

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
     
    int T;
    LL n;
     
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%lld",&n);
            LL ans=0;
            for(LL i=3;i*i<=2*n-1;i+=2) ans++;
            printf("%lld
    ",ans);
        }
    }
    

    (O(1))

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
    
    int T;
    LL n;
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%lld",&n);
            LL ans=(sqrt(2*n-1)+1)/2-1;
            printf("%lld
    ",ans);
        }
    }
    

    E

    F

    G

  • 相关阅读:
    AN BD FD DD CD UT CT TT IT ST UAT OP
    log4j
    重构代码
    with as sql的优化
    svn locked,并且无法clean up 的解决方法
    去掉Eclipse中没用的workspace
    getHibernateTemplate()的get方法
    Java反射
    windows 右键新建html文档
    fiddler 针对单个接口打断点
  • 原文地址:https://www.cnblogs.com/fxq1304/p/14410244.html
Copyright © 2011-2022 走看看