$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$戳这里

01-12 04:40