Educational Codeforces Round 104 (Rated for Div. 2)

A. Arena

#include<bits/stdc++.h>
using namespace std;
int a[110];
int main()
{
    int t, n, i;
    scanf("%d", &t);
    while (t--){
        int mi = 110;
        scanf("%d", &n);
        for (i = 1; i <= n; i++){
            scanf("%d", &a[i]);
            mi = min(mi, a[i]);
        }
        int res = 0;
        for (i = 1; i <= n; i++)
            if (a[i] > mi) res++;
        printf("%d\n", res);
    }
}

B. Cat Cycle
题解:n为偶数,没有重合,直接取模;n为奇数,从第n/2项(向上取整)开始,每过n/2项(向下取整)步数加一,注意取模。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t, n, k;
    scanf("%d", &t);
    while (t--){
        scanf("%d%d", &n, &k);
        if (n % 2 == 0){
            if (k <= n) printf("%d\n", k);
            else if (k % n) printf("%d\n", k % n);
            else printf("%d\n", n);
            continue;
        }
        if (k < (n + 1 ) / 2) printf("%d\n", k);
        else if (k < n) printf("%d\n", k + 1);
        else{
            int add = 1 + (k - (n + 1) / 2) / (n / 2);
            int num = k % n;
            if (!num) num = n;
            if ((num + add) % n) printf("%d\n", (num + add) % n);
            else printf("%d\n", n);
        }
    }
}

C. Minimum Ties
题意:有n支队伍,每两支队伍比赛一次,平局双方各加一分,赢的加三分,输的不加分。问最少平局几次使得每支队伍的分数相同。
题解:将每场比赛看成一条边,每支队伍看成一个点。平局双方都能加一分,可以看作没有加分,即这条边当作不存在。如果有输赢,那么边指向的点赢,指出去的点输。题目要求每支队伍的分数相同,也就是指向每个点的边数相同。当有奇数个点时,每个点有偶数条边与之相连,一半指进一半指出即可;偶数个点有奇数条边相连,去掉一条边,再对半分即可。

#include<bits/stdc++.h>
using namespace std;
int a[110];//差值为i的边的方向
int main()
{
    int t, n, i, j;
    scanf("%d", &t);
    while (t--){
        scanf("%d", &n);
        if (n % 2){
            for (i = 1; i <= n / 2; i++)
                a[i] = 1;
            for (i = n / 2 + 1; i <= n; i++)
                a[i] = -1;
        }
        else{
            for (i = 1; i < n / 2; i++)
                a[i] = 1;
            a[n / 2] = 0;
            for (i = n / 2 + 1; i <= n; i++)
                a[i] = -1;
        }
        for (i = 1; i < n; i++)
        for (j = i + 1; j <= n; j++){
            if (j > 2) printf(" ");
            printf("%d", a[j - i]);//值为1,i->j;-1, j->i
        }
        printf("\n");
    }
}

D. Pythagorean Triples
题意:问满足c=a ^ 2-b和c ^ 2 = a ^ 2 + b ^ 2的三个数的个数。
题解:联立方程组,相减得到c=b+1,相加得到a^2=2b+1。可以发现,当a为奇数时b才有解。同时代换后可以得到c=(a ^ 2 + 1)/2<=n。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t, n, i;
    scanf("%d", &t);
    while (t--){
        scanf("%d", &n);
        int res = 0;
        for (i = 3; i * i <= 2 * n - 1; i += 2)
            res++;
        printf("%d\n", res);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值