解题:USACO13NOV Empty Stalls

题面

当然可以用并查集做,不过你需要按秩合并+路径压缩(才可能过),因为数据范围十分不友好......

USACO的官方做法更为优秀。首先题目告诉我们牛们加入的前后顺序不影响结果(自己证明也很容易,显然两头牛到达一个房子最后的结果看起来是一样的)。所以我们不妨先把牛们都安排在它们喜欢的房子,然后$O(n)$扫描一遍模拟把它们放进对应的房子这个过程。因为第一次我们先扫到前面,可能后面一些牛之后又到了前面,所以要再扫一遍。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=3000005;
 6 int n,k,x,y,a,b,s;
 7 int cow[N],used[N];
 8 int main()
 9 {
10     scanf("%d%d",&n,&k);
11     for(int i=1;i<=k;i++)
12     {
13         scanf("%d%d%d%d",&x,&y,&a,&b);
14         for(int j=1;j<=y;j++) cow[(1ll*a*j+b)%n]+=x;
15     }
16     for(int i=0;i<n;i++)
17         {s+=cow[i]; if(s) s--;}
18     for(int i=0;i<n;i++)
19     {
20         s+=cow[i]; if(s) s--;
21         else {printf("%d",i); break;}
22     }
23     return 0;
24 }
View Code

猜你喜欢

转载自www.cnblogs.com/ydnhaha/p/9757317.html
今日推荐