比赛 20131207 评测结果 ATTTTTTTTTT
题目名称 空牛栏 最终得分 9
用户昵称 Chenyao2333 运行时间 10.003 s
代码语言 C++ 内存使用 11.75 MiB
提交时间 2013-12-07 16:49:56
显示代码纯文本
//N K
//X Y A B
//f(i)=(A*i+B) mod N

#include<stdio.h>
#include<deque>
using namespace std;

const int MAXN=3000000+10;
typedef long long LL;

int N;
int niu_n[MAXN]={0};

void open(){
	freopen("empty.in","r",stdin);
	freopen("empty.out","w",stdout);
}

inline int f(LL i,LL A,LL B){
	return ((A%N)*(i%N)+(B%N))%N;
}

void read(){
	int k;
	int x,y,a,b;
	scanf("%d %d",&N,&k);
	for(int i=0;i<k;i++){
		scanf("%d %d %d %d",&x,&y,&a,&b);
		for(int j=1;j<=y;j++){
			niu_n[f(j,a,b)]+=x;
		}
	}
}

struct lan{
	int star;
	int end;
	int len;
	lan(int a,int b){
		star=a;
		end=b;
		len=b-a+1;
	}
};
deque<lan> q;
int solve(){
	int w=-1;
	bool ok=false;
	for(int i=0;i<N;i++){
		int n=niu_n[i];
		if(!n)continue;
		
		while(n>0){
			if(w>=i && w+n<N){
				w+=n;
				if(w>=N){
					n=w-N+1;
					w=N;
					ok=true;
				}else n=0;
			}
			else if(w>=i && w+n>=N){
				
				if(!ok){
					w+=n;
					if(w>=N){
						n=w-N+1;
						w=N;
						ok=true;
					}else n=0;
				}
				while(n>0){
					lan l=q.front();q.pop_front();
					if(l.len>n){
						l.star+=n;
						q.push_front(l);
						n=0;
					}
					if(l.len<=n){
						n-=l.len;
					}
				}
			
			}
			else if(w+1<=i-1){
				q.push_back(lan(w+1,i-1));
				w=i+n-1;
				if(w>=N){
					n=w-N+1;
					w=N;
					ok=true;
				}else n=0;
			}
		}
	}
	lan ans=q.front();
	return ans.star;
}

int main(){
	open();
	read();
	int ans=solve();
	printf("%d",ans);
	return 0;
}