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;
}