$Luogu\ P1003$ 铺地毯
对于要求的点,我们直接判断是否在地毯范围内即可,注意要求的是最上面的地毯,所以要倒序枚举
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=10002; 4 int n,a,b,A[N],B[N],G[N],K[N]; 5 int main(){ 6 scanf("%d",&n); 7 int i; 8 for(i=1;i<=n;i++) 9 scanf("%d%d%d%d",&A[i],&B[i],&G[i],&K[i]); 10 scanf("%d%d",&a,&b); 11 for(i=n;i>=1;i--) 12 if(A[i]<=a&&A[i]+G[i]>=a&&B[i]<=b&&B[i]+K[i]>=b) break; 13 if(i==0) printf("-1\n"); 14 else printf("%d\n",i); 15 return 0; 16 }
$Luogu\ P1311$ 选择客栈
$Itst$考过的原题,直接贴个$link\to$戳这里
$Luogu\ P1312$ $Mayan$游戏
$Luogu\ P1313$ 计算系数
就是一道数论题……?首先$a^n*b^m$很显然就可以算出来,然后我们把$(ax+by)^k$看成$k$个$(ax+by)$相乘,那么$x^ny^m$相当于在这$k$个中选出$n$个$x$,然后和剩下的$m$个$y$相乘,于是可以用组合数解决。
1 #include<bits/stdc++.h> 2 #define ll long long 3 #define go(i,a,b) for(register int i=a;i<=b;i++) 4 using namespace std; 5 int a,b,k,n,m; 6 const int mod=10007; 7 int f[1002]; 8 int ksm(ll x,int y){ 9 int ans=1; 10 while(y){ 11 if(y&1) ans=(ans*x)%mod; 12 x=(x*x)%mod; 13 y>>=1; 14 } 15 return ans; 16 } 17 int main(){ 18 scanf("%d%d%d%d%d",&a,&b,&k,&n,&m); 19 a%=mod;b%=mod; 20 f[0]=f[1]=1; 21 go(i,2,k) f[i]=(i*f[i-1])%mod; 22 int ans=(ksm((ll)a,n)*ksm((ll)b,m))%mod; 23 int son=f[k]; 24 ll mum=f[n]*f[m]; 25 mum=(ll)ksm(mum,mod-2); 26 ans=ans*son%mod*mum%mod; 27 printf("%d\n",ans); 28 return 0; 29 }
$Luogu\ P1314$ 聪明的质监员
$Luogu \P1315$ 观光公交
之前写过题解,直接贴个$link\to$戳这里