计算系数
#include<cstdio>
using namespace std;
const int mod=10007;
int C[mod];
int main() {
freopen("factor.in","r",stdin);
freopen("factor.out","w",stdout);
long long a,b,x=1,y=1,k,n,m,p;
scanf("%I64d%I64d%I64d%I64d%I64d",&a,&b,&k,&n,&m);
a%=mod;b%=mod;p=m;C[1]=1;
while(n--) x=x*a%mod;
while(m--) y=y*b%mod;
for(int i=2;i<=k+1;i++)
for(int j=i;j>=2;j--)
C[j]=(C[j]+C[j-1])%mod;
printf("%I64d\n",C[p+1]%mod*x*y%mod);
return 0;
}
杨辉三角完事。
聪明的质监员
二分答案即可得,但是我没有搞出来
只有暴力分...
观光公交
标准10分k=0...
其实正解并不简单...
#include<cstdio>
using namespace std;
int max(int a,int b) {return a>b?a:b;}
const int maxn=1000+5;
const int maxm=10000+5;
int lef[maxn],shij[maxn],g[maxn],d[maxn];
int t[maxm],a[maxm],b[maxm],ans,sum[maxn];
int main() {
freopen("bus.in","r",stdin);
freopen("bus.out","w",stdout);
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<n;i++)
scanf("%d",&d[i]);
for(int i=0;i<m;i++) {
scanf("%d%d%d",&t[i],&a[i],&b[i]);
lef[a[i]]=max(lef[a[i]],t[i]);
sum[b[i]]++;
}
for(int i=1;i<=n;i++)
shij[i]=max(shij[i-1],lef[i-1])+d[i-1];
g[n-1]=g[n]=n;
for(int i=n-2;i>0;i--) {
if(shij[i+1]<=lef[i+1])
g[i]=i+1;
else g[i]=g[i+1];
}
for(int i=1;i<=n;i++)
sum[i]+=sum[i-1];
for(int i=0;i<m;i++)
ans+=shij[b[i]]-t[i];
while(k--) {
int delta=0,l,r;
for(int i=1;i<=n;i++)
if(d[i]>0 && sum[g[i]]-sum[i]>delta) {
delta=sum[g[i]]-sum[i];
l=i;r=g[i];
}
if(r>=n) r=n-1;
d[l]--;
ans-=delta;
for(int i=l;i<=r;i++)
shij[i]=max(shij[i-1],lef[i-1])+d[i-1];
for(int i=r;i>=l;i--)
if(shij[i+1]<=lef[i+1])
g[i]=i+1;
else g[i]=g[i+1];
}
printf("%d",ans);
return 0;
}
就是这样...
中等水平的成绩...
凉凉......