noip 2011 Day 2(校内自测)

计算系数

#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;
}

就是这样...

中等水平的成绩...

凉凉......


猜你喜欢

转载自blog.csdn.net/LoLiK1314/article/details/79942325