Educational Codeforces Round 104 (Rated for Div. 2)

A. Arena

原题链接

n个英雄有a[i]水平,随机选两个对抗,水平高的获胜,问获胜的英雄数量。


枚举每一种情况。

#include <bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int vis[105],a[105];
int main() {
    int t,n;
    cin>>t;
    while(t--){
        cin>>n;
        memset(vis,0,sizeof vis);
        for(int i=0;i<n;i++)cin>>a[i];
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                if(a[i]<a[j])vis[j]=1;
                else if(a[i]>a[j])vis[i]=1;
            }
        }
        int res=0;
        for(int i=0;i<n;i++)if(vis[i])res++;
        cout<<res<<'\n';
    }
    return 0;
}

B. Cat Cycle

原题链接

给定n(A,B在1~n范围内绕圈走),有A,B,A一直往左走,B一直往右走,走到头下一步从各自开头继续走,但是有一种特殊情况,两个人都走x时,A会抢到这个位置,而B会走x的下一个位置。求第k步B的下标。


k偶数很容易发现A,B不会抢夺位置,因此都是正常走k%n即可。

k奇数:

当n=3时发现N=x+1,也就是第N步会碰撞一次。

当n=5时,N=2x+1,第(x正整数)N步碰撞

当n=7,N=3x+1,第N步碰撞。

因此当n=n,N=n/2*x+1。此时令N=k,就能求出多走的x步。

因为我们每碰撞一次实际上B会多走一个位置,所以我们求碰撞次数+k就能知道第k步的下标

#include <bits/stdc++.h>

using namespace std;
const int N=1e3+5;

int main() {
    int t;
    cin>>t;
    while(t--){
        int n,k;
        cin>>n>>k;
        if(n&1){
           int temp=(k-1)/(n/2);
           int res=(k+temp)%n;
           if(res==0)cout<<n;
           else cout<<res;     
        }else{
            int res=k%n;
            if(res==0)cout<<n;
            else cout<<res;
        }
        cout<<'\n';
    }
    return 0;
}

D. Pythagorean Triples

原题链接

给你c=a^2 -b和c^2 =a^2 +b^2 然后求有多少个(a,b,c)满足该条件。(n<=1e9)


通过上述公式消去c,得到a^2 =2*b+1,可以知道a最低是3(通过b来求a,a,b,c都是正整数),同时也可以求出c=(a*a+1)/2,b=(a*a-1)/2。所以枚举a,来判断b,c是否符合条件。而且这种满足的条件很少,所以可做

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N=1e3+5;
void solve()
{
    int t;
    cin>>t;
    while(t--){
        ll n,res=0;
        cin>>n;
        for(int i=3;i<=n;i++){
            if((1ll*i*i+1)/2>n)break;
            if((1ll*i*i+1)%2==0&&(1ll*i*i-1)%2==0)res++;
        }
        cout<<res<<'\n';
    }
}
int main() {
    solve();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43566782/article/details/113826245