Educational Codeforces Round 104 (Rated for Div. 2)

Educational Codeforces Round 104 (Rated for Div. 2)

https://codeforces.ml/contest/1487

A. Arena

思路

题意为给出一些英雄的等级序列,每两个英雄之间可以进行对决,等级大的一个英雄的等级会加1,当英雄赢的场数大于等于100500时胜出,求出最大的胜出英雄数。
因为只有等级高的英雄才可以赢得对决从而胜出,而等级最低的英雄永远无法胜出,所以只需要求出除去最小等级后的英雄数。

Code

#include<bits/stdc++.h>
#define IO  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std; 
 
const int inf=0x3f3f3f3f;
typedef long long ll; 
const int N= 1e5+7;
const ll mod=998244353;       
int a[107];
int main(){ 
    IO;
    int t=1;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        for (int i = 0; i < n; ++i)
          {
              cin>>a[i];
          } sort(a,a+n);
          int ans=0;
        for (int i = 0; i < n; ++i)
        {
            if(a[i]!=a[0])ans++;
        }cout<<ans<<endl;
    }
    return 0;
}

B. Cat Cycle

思路

题意为有两种猫A和B,他们都有相同的n个睡觉点,由序列1、2、3、…… 、n-1、n组成,其中A的睡觉点从n开始倒序循环移动,B的睡觉点从1开始循环移动,当某一时刻A和B要同时到达同一个睡觉点时,A会进入此点而B会跳过此点进入它序列中的下一个点。询问k时刻时B所在位置。

  • 考虑A和B没有冲突的情况,此时n为偶数,答案即为k%n+(k%n==0)*n。(考虑到k是n的倍数的情况)
  • 当n为奇数时,它们发生冲突的次数即使B多走的次数,而每过n/2时刻它们就会发生冲突(要除去第1个时刻的情况,因为第1个时刻它们位于出发点),此时B走的时刻数就是k加上多走的次数。

Code

#include<bits/stdc++.h>
#define IO  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std; 
 
const int inf=0x3f3f3f3f;
typedef long long ll; 
const int N= 1e5+7;
const ll mod=998244353;       

int main(){ 
    IO;
    int t=1;
    cin>>t;
    while(t--){  
        ll n,k;
        cin>>n>>k;
        if(n%2==0){
            cout<<(k%n+(k%n==0?n:0))<<endl;
        }
        else{
            ll p=(n+1)/2;
            p=(k>=p)+(k>=p)*(k-p)/(p-1);
            k+=p;
            cout<<(k%n+(k%n==0?n:0))<<endl;
        }
    }
    return 0;
}

C. Minimum Ties

思路

题意为所有队伍得分相同并且保证平局数最少。

  • 当n为奇数时,平局数为0,可以让每个队伍的胜场数均为(n-1)/2
  • 当n为偶数时,此时在奇数情况的基础上再加上一场平居即可。

Code

#include<bits/stdc++.h>
#define IO  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std; 
 
const int inf=0x3f3f3f3f;
typedef long long ll; 
const int N= 1e5+7;
const ll mod=998244353;       

int a[107][107];

int main(){ 
    IO;
    int t=1;
    cin>>t;
    while(t--){  
        int n;
        cin>>n;
        if(n==2)cout<<0<<endl;
        else if(n%2==1){
            int k=(n-1)/2;
            for (int i = 1; i <= n; ++i)
            {
                for (int j = 1; j <= k; ++j)
                {
                    a[i][(i+j)%n+((i+j)%n==0)*n]=1;
                    a[(i+j)%n+((i+j)%n==0)*n][i]=-1;
                }
            }
            for (int i = 1; i <= n; ++i)
            {
                for (int j = 1+i; j <= n; ++j)
                {
                    if(i==j)continue;
                    cout<<a[i][j]<<" ";
                }
            }cout<<endl;
        }
        else{
            int k=(n-1)/2;
            for (int i = 1; i <= n; ++i)
            {
                for (int j = 1; j <= k; ++j)
                {
                    a[i][(i+j)%n+((i+j)%n==0)*n]=1;
                    a[(i+j)%n+((i+j)%n==0)*n][i]=-1;
                }
                a[i][(i+k)%n+((i+k)%n==0)*n+1]=0;
                a[(i+k)%n+((i+k)%n==0)*n+1][i]=0;
            }
            for (int i = 1; i <= n; ++i)
            {
                for (int j = i+1; j <= n; ++j)
                {
                    cout<<a[i][j]<<" ";
                }
            }cout<<endl;
        }
    }
    return 0;
}

D. Pythagorean Triples

思路

一开始没看懂,瞎琢磨了半天,后来发现这题巨简单
题意为给出n求出满足条件的三元组(a,b,c)的个数,其中 a<=b<=c,c=a2-b,a2+b2=c2
两个等式消去c得到: b=(a2-1)/2,c=(a2+1)/2,并且因为a<=b<=c,所以得出 (a2+1)/2<=n ,而 b=(a2-1)/2>=a 得出 a>=3,所以得到了a的取值,直接在此区间搜索判断是否满足条件即可。

Code

#include<bits/stdc++.h>
#define IO  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std; 
 
const int inf=0x3f3f3f3f;
typedef long long ll; 
const int N= 1e5+7;
const ll mod=998244353;       

int main(){ 
    IO;
    int t=1;
    cin>>t;
    while(t--){  
        ll n;
        cin>>n;
        ll ans=0;
        for (int i = 3; i <= n; ++i)
        {
            if((i*i+1)/2>n)break;
            if((i*i-1)%2==0&&(i*i+1)%2==0)ans++;
        }cout<<ans<<endl;

    }
    return 0;
}
posted @ 2021-02-16 02:21  !^^!  阅读(45)  评论(0)    收藏  举报