【模拟】NEERC15 G Generators (Codeforces GYM 100851)
2016-08-30 18:58
417 查看
题目链接:
http://codeforces.com/gym/100851
题目大意:
n个序列。每个序列有4个值x,a,b,c,之后按照x=(a*x+b)%c扩展无穷项。
求每个序列各取一个数之后求和不是K的倍数的最大值。
(x,a,b,c<=1000,n<=10000,K<=109)
题目思路:
【模拟】
先暴力把每个序列能够获得的值都求出来。存下最大的两个%K不相等的值。
接下来先取每个序列最大的值,如果%K不为0则为答案。
否则把其中一个换成次优值。因为前面满足%K不相等所以只用换一个。
http://codeforces.com/gym/100851
题目大意:
n个序列。每个序列有4个值x,a,b,c,之后按照x=(a*x+b)%c扩展无穷项。
求每个序列各取一个数之后求和不是K的倍数的最大值。
(x,a,b,c<=1000,n<=10000,K<=109)
题目思路:
【模拟】
先暴力把每个序列能够获得的值都求出来。存下最大的两个%K不相等的值。
接下来先取每个序列最大的值,如果%K不为0则为答案。
否则把其中一个换成次优值。因为前面满足%K不相等所以只用换一个。
// //by coolxxx //#include<bits/stdc++.h> #include<iostream> #include<algorithm> #include<string> #include<iomanip> #include<map> #include<stack> #include<queue> #include<set> #include<bitset> #include<memory.h> #include<time.h> #include<stdio.h> #include<stdlib.h> #include<string.h> //#include<stdbool.h> #include<math.h> #define min(a,b) ((a)<(b)?(a):(b)) #define max(a,b) ((a)>(b)?(a):(b)) #define abs(a) ((a)>0?(a):(-(a))) #define lowbit(a) (a&(-a)) #define sqr(a) ((a)*(a)) #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b)) #define mem(a,b) memset(a,b,sizeof(a)) #define eps (1e-8) #define J 10 #define mod 1000000007 #define MAX 0x7f7f7f7f #define PI 3.14159265358979323 #define N 10004 #define M 1004 using namespace std; typedef long long LL; int cas,cass; int n,m,lll,ans; struct xxx { int num,c; }q [2]; int s ; bool cmp1(xxx aa,xxx bb) { return aa.c>bb.c; } void print() { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=s[i];j++) { printf("%d:%d ",q[i][j].c,q[i][j].num); } puts(""); } } int main() { #ifndef ONLINE_JUDGE // freopen("1.txt","r",stdin); // freopen("2.txt","w",stdout); #endif int i,j,k; int a,b,c,x; // for(scanf("%d",&cass);cass;cass--) // for(scanf("%d",&cas),cass=1;cass<=cas;cass++) // while(~scanf("%s",s+1)) while(~scanf("%d",&n)) { ans=0; scanf("%d",&m); for(i=1;i<=n;i++) { scanf("%d%d%d%d",&x,&a,&b,&c); mem(s,0);q[i][0].num=q[i][1].num=q[i][0].c=q[i][1].c=-1; s[x]=1; for(j=2,x=(a*x+b)%c;!s[x];x=(a*x+b)%c,j++) s[x]=j; for(x=c-1,j=0;x>=0 && j<2;x--) { if(!s[x])continue; if(x>=q[i][0].c) { if(x%m!=q[i][0].c%m)q[i][1]=q[i][0]; q[i][0].c=x,q[i][0].num=s[x]; } else if(x>q[i][1].c && x%m!=q[i][0].c%m) q[i][1].c=x,q[i][1].num=s[x]; if(q[i][1].c!=-1 && q[i][0].c!=-1)break; } } for(i=1;i<=n;i++)ans+=q[i][0].c; if(ans%m) { printf("%d\n",ans); for(i=1;i<=n;i++) printf("%d ",q[i][0].num-1); puts(""); } else { cas=0;q[0][0].c=MAX;q[0][1].c=0; for(i=1;i<=n;i++) { if(q[i][1].c==-1)continue; if(q[i][0].c-q[i][1].c<q[cas][0].c-q[cas][1].c) cas=i; } if(cas==0){puts("-1");continue;} ans=ans-q[cas][0].c+q[cas][1].c; printf("%d\n",ans); q[cas][0]=q[cas][1]; for(i=1;i<=n;i++) printf("%d ",q[i][0].num-1); puts(""); } } return 0; } /* // // */
相关文章推荐
- 【模拟】NEERC15 G Generators(2015-2016 ACM-ICPC)(Codeforces GYM 100851)
- 【模拟】NEERC15 E Easy Problemset (2015-2016 ACM-ICPC)(Codeforces GYM 100851)
- 【模拟】NEERC15 J Jump (Codeforces GYM 100851)
- 【模拟】NEERC15 J Jump(2015-2016 ACM-ICPC)(Codeforces GYM 100851)
- 【模拟】NEERC15 A Adjustment Office (Codeforces GYM 100851)
- 【模拟】NEERC15 A Adjustment Office (2015-2016 ACM-ICPC)(Codeforces GYM 100851)
- 【模拟】NEERC15 E Easy Problemset (Codeforces GYM 100851)
- 【最短路】NEERC15 F Froggy Ford (Codeforces GYM 100851)
- 【最短路】NEERC15 F Froggy Ford(2015-2016 ACM-ICPC)(Codeforces GYM 100851)
- 【二分】NEERC15 L Landscape Improved (Codeforces GYM 100851)
- 【二分】NEERC15 L Landscape Improved(2015-2016 ACM-ICPC)(Codeforces GYM 100851)
- Codeforces Gym 100650C The Game of Efil 模拟+阅读题
- Codeforces Gym 100340C ePig 模拟
- Codeforces Gym 101158 E. Infallibly Crack Perplexing Cryptarithm (模拟 + 语法分析)
- codeforces Gym 100338F Spam Filter 垃圾邮件过滤器(模拟,实现)
- codeforces gym 100357 K (表达式 模拟)
- Codeforces Gym 101158 B. Quality of Check Digits (模拟)
- 【模拟】ECNA 2015 I What's on the Grille? (Codeforces GYM 100825)
- codeforces Gym - 101190H——Hard Refactoring (模拟)
- 【模拟】BAPC2014 G Growling Gears (Codeforces GYM 100526)