[toc]
A A Simple Math Problem
B Apple
题意:
n个苹果,m个人,每个人至少一个苹果,且每个人苹果数量不同,问有没有可能?
题解:
签到题(我竟然还wa了一次,着急抢时间不可取)
我们假设m个人每个人苹果数量分别是为1...m
求和m*(1+m)/2
如果n大于则可能,否则不可能
代码:
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; int n,m; while(t--) { cin>>n>>m; if(n>=(m*(1+m)/2)&&n>=m) { cout<<"possible"<<endl; } else cout<<"impossible"<<endl; } }
C Charging
D Chinese Valentine's Day
E Color Sequence
题意:
n个数,问有多少个合格序列?
合格序列定义:序列中每个数出现次数均为偶数
题解:
一开始用二进制+尺取做,超时了
后来发现答案更加其巧妙
二进制是为了方便记录每个数出现的情况,因为只有奇数和偶数,如果x出现一次,就记录第x位为1,也就是(1<<x),当x又一次出现时,异或一下,1^1就会成0
具体做法:
now表示每个数出现情况1~20,查看哪些数出现奇数次,记录下来,然后ans+=mark[temp]
代码最后两句什么意思?
ans+=mark[temp]; mark[now]++;
now表示是一种奇数情况,如果now为0说明都是偶数
我们用mark[now]++来记录每次的奇数情况,然后当now又出现一样的值时,也就是同一种情况出现两次,那奇数*2=偶数,我们就加上答案ans+=mark[now]
注:now[0]=1
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxm=1e6+5; int mark[1<<22]; int a[maxm]; int n,m; signed main(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); int now=0; ll ans=0; mark[0]=1; for(int i=1;i<=n;i++){ now^=(1<<a[i]); ans+=mark[now]; mark[now]++; } cout<<ans<<endl; return 0; } /* 5 1 2 1 2 3 */
F Magical Number
G Mathematical Practice
题意:
从一个大小为n的集合里,有顺序地取m次子集,求这些子集两两没有交集的方案数
题解:
说实话,式子我没推出来。。准确说是题没看懂
但是看样例
3 2->27
1000 25->605425003
3 2等于27,要么是3,要么是(2+1),我们可以用第二个样例来试验,发现对了。。。emmm
题解参考
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod= 998244353; ll poww(ll a,ll b) { ll ans=1; while(b) { if(b&1)ans=(ans*a)%mod; a=a*a%mod; b>>=1; } return ans%mod; } int main() { ll x,y; cin>>x>>y; cout<<poww(y+1,x); }
H Sequence
I Simple Math Problem
题意:
给你一个5 * 5的矩阵,在掌握其规律后,问n * n的矩阵,第x行第y位答案是多少
题解:
u1s1,这个方阵我没看懂。。
我就感觉就是递增数的顺序,0~24,按照左下斜的顺序摆放
代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { long long n,x,y; cin>>n>>x>>y; ll sum=0; ll w=x+y; if(w<n) { sum+=(w+1)*w/2; sum+=x; } else { sum+=(n+1)*n/2; sum+=(3*n-(w+1))*(w-n)/2; sum+=n-y-1; } cout<<sum; }
J Split Game
K Travel Expense
L WZB's Harem
M Zoos's Animal Codes
题意:
两个字符串,请连接输出
题解:
题都没看,一看样例直接打代码
代码:
#include<bits/stdc++.h> using namespace std; int main() { string a,b; cin>>a>>b; cout<<a+b<<endl; }