A - Iroha and Haiku (ABC Edition)
题目大意
判断三个数中是否有两个5和一个7
详细思路
暴力判断即可
具体实现
#include<cstdio>
int a,b,c;
int main(){
scanf("%d %d %d",&a,&b,&c);
if((a==5&&b==5&&c==7)||(a==5&&b==7&&c==5)||(a==7&&b==5&&c==5))printf("YES");
else printf("NO");
}
B - Iroha Loves Strings (ABC Edition)
题目大意
把nnn个字符串按字典序排序
详细思路
用系统自带string,sortstring,sortstring,sort即可顺利解决
具体实现
#include<bits/stdc++.h>
using namespace std;
int n,m;string a[10005];
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)printf("%s",a[i].c_str());
}
C - Iroha’s Obsession
题目大意
求大于等于NNN且满足十进制下每一位数字都不在DDD数组的最小值
详细思路
从NNN开始枚举且判断,遇到第一个满足条件的值就输出结束程序
具体实现
#include<cstdio>
int n,k,x,a[10005],b[15],z;
int main(){
scanf("%d %d",&n,&k);
for(int i=1;i<=k;i++){scanf("%d",&x);b[x]=1;}
for(int i=n;;i++){
z=0;x=i;
while(x>0){z=z|b[x%10];x/=10;}
if(z==0){printf("%d",i);return 0;}
}
}
D - Iroha and a Grid
题目大意
在 n∗mn*mn∗m的格子中,只能向右和向下走,左下的 a∗ba*ba∗b的格子不能走
求从左上走到右下的方案数
详细思路
设左上格子坐标为(1,1)(1,1)(1,1),右下格子为(n,m)(n,m)(n,m)
把图按照n−a+1n-a+1n−a+1的线分割
枚举iii从b+1b+1b+1到mmm,从(1,1)(1,1)(1,1)到(n−a,i)(n-a,i)(n−a,i)格子方案数为Cn−a+i−2n−a−1C^{n-a-1}_{n-a+i-2}Cn−a+i−2n−a−1,从(n−a+1,i)(n-a+1,i)(n−a+1,i)到(n,m)(n,m)(n,m)格子方案数为Ca+m−i−3a−2C^{a-2}_{a+m-i-3}Ca+m−i−3a−2
具体实现
#include<cstdio>
long long n,m,a,b,ans=0,JC[1000005],NY[1000005],mod=1e9+7,N=2e5;
long long ksm(long long t1,long long t2){
long long t3=1;
while(t2){
if(t2&1)t3=t1*t3%mod;
t1=t1*t1%mod;t2>>=1;
}
return t3;
}
long long C(long long t1,long long t2){return JC[t2]*NY[t1]%mod*NY[t2-t1]%mod;}
int main(){
JC[0]=1;
for(int i=1;i<=N;i++)JC[i]=JC[i-1]*i%mod;NY[N]=ksm(JC[N],mod-2);
for(int i=N;i>=1;i--)NY[i-1]=NY[i]*i%mod;
scanf("%lld %lld %lld %lld",&n,&m,&a,&b);a=n-a+1;
for(int i=b+1;i<=m;i++){
ans+=C(a-2,a+i-3)*C(n-a,n-a+m-i);ans%=mod;
}
printf("%lld",ans);
}