bzoj 3310: [Usaco2013 Nov]Empty Stalls

70 篇文章 0 订阅
68 篇文章 0 订阅

题目链接

看那个著名的“USACO被虐记”说的是按照题意搞一搞就好了

但是无比之弱的我还是T了两发

按照题意暴力搞什么的都是骗人的qwq


不能每次都暴力处理每个牛

先把所有的牛都安放在他喜欢的位置上

然后从头到尾最多扫两边就好了

因为保证牛的数量至多为n-1

每次把多的牛往♂后♂搞


一个很弱的代码:

#include<iostream>
#include<cstdio>

using namespace std;

int n,k;
int f[3000030];

void cal(int x,int y,int a,int b){
	int num=b;
	for(int i=1; i<=y; i++){
		num+=a;
		num%=n;
		f[num]+=x;
	}
}

int main(){
	scanf("%d%d",&n,&k);
	for(int i=0; i<k; i++){
		int x,y,a,b;
		scanf("%d%d%d%d",&x,&y,&a,&b);
		cal(x,y,a,b);
	}
	for(int i=0; i<n-1; i++)if(f[i]>1)f[i+1]+=f[i]-1,f[i]=1;
	if(f[n-1]>1){
		f[0]+=f[n-1]-1,f[n-1]=1;
		for(int i=0; i<n-1; i++)if(f[i]>1)f[i+1]+=f[i]-1,f[i]=1;
	}
	for(int i=0; i<n; i++){
		if(!f[i]){
			printf("%d\n",i);
			return 0;
		}
	}
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值