按照题意直接模拟即可
当n大于10时,输出q
n小于10时,输出
signed main()
{
int n,q;
scanf("%lld%lld",&n,&q);
if(n>=10) printf("%lld\n",q);
else printf("%lld\n",q+100*(10-n));
return 0;
}
B 今天猛犸不上班
求数字n在k进制下的位数
其实就是看n除k可以除几次除成0呗
比如10000在十进制是五位数,那就可以除五次十
代码如下
signed main() {
int n,k,ans=0;
cin>>n>>k;
while(n) {
n/=k;
ans++;
}
cout<
C 你干嘛 哈哈嗨呦
这道题其实仔细看题面就能发现简单的解法
位置数和n只有100个,我们可以直接暴力每一个位置,在取min就好了
代码如下
const int N=105;
int a[N];
int main() {
int n,ans=1e9;
scanf("%d",&n);
for(int i=0,x;i
D 重生之我是菜狗
题意可以抽象为,从n只中选x只,不能选a只或b只
大家知道,从n只中选i只,答案为种,排除不选,也就是
不能选a只或b只,就从答案中减去 和
代码如下
const int N=3e5+10;
const int mod=1e9+7;
int qpow(int x,int y) {
int ans=1;
while(y) {
if(y&1) ans=ans*x%mod;
y>>=1;
x=x*x%mod;
}
return ans;
}
void add(int &x,int y) {
x+=y;
if(x>=mod) x-=mod;
if(x<0) x+=mod;
}
signed main() {
int n,a,b;
cin>>n>>a>>b;
int ans=qpow(2,n),s=1;
add(ans,-1);
for(int i=1;i<=b;i++) {
s=1LL*s*(n-i+1)%mod,s=1LL*s*qpow(i,mod-2)%mod;
if(i==a) add(ans,-s);
if(i==b) add(ans,-s);
}
cout<
E 这隔离点网太烂了!
比较复杂的排列组合
分开考虑有没有房间人数为0
1.没有房间为0的移法
2.有且只有一个房间为0的移法
3.超过一个房间为0的移法
将n个人分到n-i的房间 可以这样计算
n个人之间可放入n-1个隔板,因要分成n-i份,需要插入n-i-1个隔板
=
选出i个房间空出来,选法有
所以对于每一个空出房间数i,有
总的答案为
代码如下
const int N=3e5+10;
const int mod=1e9+7;
int f[N],inv[N];
int qpow(int a,int b){
int ret=1;
while(b){
if(b&1)ret=ret*a%mod;
a=a*a%mod;
b>>=1;
}
return ret;
}
int C(int n,int m){
int ans;
ans=f[n]*inv[n-m]%mod*inv[m]%mod;
return ans;
}
signed main(){
int n,k,i,ans=0;
cin>>n>>k;
f[0]=1;
for(i=1;i<=n;i++)f[i]=f[i-1]*i%mod;
for(i=0;i<=n;i++)inv[i]=qpow(f[i],mod-2)%mod;
//预处理大组合数
k=min(k,n-1);
for(i=0;i<=k;i++)
ans=(ans+C(n,i)*C(n-1,i)%mod)%mod;
cout<
F 计信狗的大一下
题目要求
我们可以转化一下求总数减去和a[i+1]%m" src="https://latex.codecogs.com/gif.latex?a%5Bi%5D%25m%3Ea%5Bi+1%5D%25m" />的
可以先将di对m取模,这样di是一个小于m的数。
根据公式,可以可以推出如下表达式
第二类的具体推到过程
要使得a_{i+1}%m" src="https://latex.codecogs.com/gif.latex?a_%7Bi%7D%25m%3Ea_%7Bi+1%7D%25m" />
因为0" src="https://latex.codecogs.com/gif.latex?d%3E0" />
a_{i}" src="https://latex.codecogs.com/gif.latex?a_%7Bi+1%7D%3Ea_%7Bi%7D" />
有\left \lfloor \frac{a_{i}}{m} \right \rfloor" src="https://latex.codecogs.com/gif.latex?%5Cleft%20%5Clfloor%20%5Cfrac%7Ba_%7Bi+1%7D%7D%7Bm%7D%20%5Cright%20%5Crfloor%3E%5Cleft%20%5Clfloor%20%5Cfrac%7Ba_%7Bi%7D%7D%7Bm%7D%20%5Cright%20%5Crfloor" />
又因
有
所以我们可以从a0开始递推到an-1
int d[5005],zero[5005];//zero[i]累计di=0个数
int a[5005];//a[i]累计d
signed main()
{
int k,q;
cin>>k>>q;
for(int i=0;i>d[i];
while(q--)
{
int n,x,m,sum,sumzero,sumn;
cin>>n>>x>>m;
x%=m;a[0]=0;zero[0]=0;
for(int i=0;i
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)