A. Two Bags of Potatoes
题意:有两个袋子,第一个袋子里装了x个土豆,第二个袋子里装了y个土豆,这个人只能记得两个了袋子总共的土豆的数量不超过n个,且能够被k整除。输出x可能的值,无解的话输出-1。
题解:水题,先求出输出-1时的情况,也就是当符合条件的x+y的最小值大于n时,输出-1。然后求出符合条件的x+y的最小值,因为x+y是k的倍数,所以每次加k,直到x+y<=n,输出x+y-y。
代码:
#include <iostream>
using namespace std;
int main()
{
int y,n,k,sum;
cin>>y>>k>>n;
if((y/k+1)*k>n) cout<<-1<<endl;
else
{sum=(y/k+1)*k;
for(int i=sum;i<=n;i=i+k)
{
cout<<i-y<<" ";
}
cout<<endl;
}
return 0;
}
C. Not Wool Sequences
题意:总结出来就是求1~2^m-1中,抽出n个数,使得每个数都不同,而且是有顺序的,求满足这种条件的序列的个数
题解:排列组合
代码:
#include <iostream>
#define mod 1000000009
using namespace std;
int main()
{
long long k=1,ans=1;
int n,m,i;
cin>>n>>m;
for(i=0;i<m;i++)
{
k=k*2;
k=k%mod;
}
for(i=1;i<=n;i++)
{
ans=(k-i)*ans;
ans=ans%mod;
}
cout<<ans<<endl;
return 0;
}