比赛 |
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;
}