2020江西省大学生程序设计竞赛

B Apple

在这里插入图片描述
思路:题目要求每个人的数量不一样,那么就假设给第一个人一个,后面每个人加一,看所需要的苹果是否大于n。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    
    
    int t; cin>>t;
    while(t--){
    
    
        int n,m; cin>>n>>m;
        int cnt = m+m*(m-1)/2;
        if(n<cnt) cout<<"impossible"<<endl;
        else cout<<"possible"<<endl;
    }
    return 0;
}

G Mathematical Practice

在这里插入图片描述
在这里插入图片描述
思路:该题就是从一个大小为 的集合中,有顺序地取 次子集,求这些子集两两没有交集的方案数。
在这里插入图片描述
首先可以发现这个n和m的范围还是蛮大的,直接暴力肯定不行,那么就用快速幂来算我们要的结果。

#include <bits/stdc++.h>
using namespace std;
int  mod = 998244353;
int ans;
int fast_power(long long base,long long power,long long mod){
    
    
    long long result = 1;
    while(power>0){
    
    
        if(power&1){
    
    
            result = result*base%mod;
        }
        power>>=1;
        base = (base*base)%mod;
    }
    return result;
}
int main()
{
    
    
    int n,m;cin>>n>>m;
    ans = fast_power(m+1,n,mod);
    cout<<ans<<endl;
    return 0;
}

I Simple Math Problem

在这里插入图片描述
输入
5 2 2
输出
12
思路:给你一个矩阵,要你输出对应位置的数,题目中的是十六进制的,要输出十进制数。
直接找规律,把矩阵分成两个部分,上三角和下三角然后去找。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    
    
    long long n,x,y; cin>>n>>x>>y;
    long long ans,step;
    long long  e =n*n-1;
    if(x+y<n){
    
    
        ans = 0; step = 1;
        for(int i=0;i<y;i++){
    
    
            ans+=step++;
        }
        step++;
        for(int i=0;i<x;i++){
    
    
            ans+=step++;
        }
    }
    else {
    
    
        ans = e,step = 1;
        for(int i=n-1;i>y;i--){
    
    
            ans-=step++;
        }
        step++;
        for(int i=n-1;i>x;i--){
    
    
            ans-=step++;
        }
    }
    cout<<ans<<endl;
}

M Zoos’s Animal Codes

签到题:直接输出两个字符串就可以。

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
    string a,b; cin>>a>>b;
    cout<<a<<b<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43811879/article/details/109750203