Gym - 100851G:Generators(人尽皆知但是WA题)
题意:现在有函数,每一项Xi=(A*X(i-1)+B)%C。现在给定N个函数以及K:X0,A,B,C。然你再每个函数选择一个数,使得其和最大,而且不被K整除。
X0,A,B,C<=1e3 ;K<=1e9
思路:因为C比较小,我们可以找到循环节(不一定是从0开始就循环了,所以用vis判定是否出现过)。然后保存每个函数的最大值,以及不同余的第二大值。
如果所有数的最大值不被K整除,那么最多有一个数被第二大替代
(一个简单题我居然wa了几发,所以还是写一下。
#include<bits/stdc++.h>
#define pii pair<int,int>
#define F first
#define S second
#define mp make_pair
using namespace std;
const int maxn=;
pii Mx[maxn][]; int pos[maxn];
int a[maxn],vis[maxn];
int main()
{
freopen("generators.in","r",stdin);
freopen("generators.out","w",stdout);
int N,K,i,j,x,A,B,C,ans=,tmp,L;
scanf("%d%d",&N,&K);
for(i=;i<=N;i++){
scanf("%d",&a[]); Mx[i][]=mp(a[],);
scanf("%d%d%d",&A,&B,&C);
vis[a[]]=; L=;
for(j=;;j++){
a[j]=(a[j-]*A+B)%C;
if(vis[a[j]]) break;
if(a[j]>Mx[i][].F) Mx[i][]=mp(a[j],j);
vis[a[j]]=; L++;
}
Mx[i][]=mp(-,-);
for(j=;j<=L;j++)
if(a[j]%K!=Mx[i][].F%K&&a[j]>Mx[i][].F) Mx[i][]=mp(a[j],j);
for(j=;j<=L;j++) vis[a[j]]=;
}
for(i=;i<=N;i++) ans+=Mx[i][].F;
for(i=;i<=N;i++) pos[i]=Mx[i][].S;
if(ans%K!=) printf("%d\n",ans);
else {
int change=,sum=-;
for(i=;i<=N;i++){
if(Mx[i][].F!=-){
if(ans-Mx[i][].F+Mx[i][].F>sum) sum=ans-Mx[i][].F+Mx[i][].F,change=i;
}
}
if(sum==-||sum%K==) { puts("-1"); return ; }
printf("%d\n",sum);
pos[change]=Mx[change][].S;
}
for(i=;i<=N;i++) printf("%d ",pos[i]);
return ;
}
Gym - 100851G:Generators(人尽皆知但是WA题)的更多相关文章
- Gym 100851G Generators (vector+鸽笼原理)
Problem G. Generators Input file: generators.in Output file: generators.outLittle Roman is studying li ...
- (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题)
layout: post title: (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题) author: " ...
- ACM: Gym 101047B Renzo and the palindromic decoration - 手速题
Gym 101047B Renzo and the palindromic decoration Time Limit:2000MS Memory Limit:65536KB 64 ...
- 常让人误解的一道js小题
一道小题引发的深思 今天无意中看到一个js笔试题,不由得想起初学js那会被各种题目狂虐的心酸,虽说现在也会被笔试题所虐,但毕竟比之前好了很多,下面就是我的个人理解,欢迎拍砖.指正: var x = 1 ...
- 牛客练习赛38 E 出题人的数组 2018ccpc桂林A题 贪心
https://ac.nowcoder.com/acm/contest/358/E 题意: 出题人有两个数组,A,B,请你把两个数组归并起来使得cost=∑i∗ci 最小,归并要求原数组的数的顺序在新 ...
- Gym 100548A Built with Qinghuai and Ari Factor (水题)
题意:给定 n 个数,问是不是全是3的倍数. 析:略. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") ...
- Gym - 101670H Go Northwest!(CTU Open Contest 2017 思维题+map)
题目: Go Northwest! is a game usually played in the park main hall when occasional rainy weather disco ...
- K-query SPOJ - KQUERY 离线 线段树/树状数组 区间大于K的个数
题意: 给一个数列,一些询问,问你区间$[l.r]$大于$K$的个数 题解: 又一个"人尽皆知傻逼题"? 我们用一个01序列表示当前询问时,该位置的数字是否对答案有贡献, 显然,对 ...
- HDU 3333 Turing Tree 离线 线段树/树状数组 区间求和单点修改
题意: 给一个数列,一些询问,问你$[l,r]$之间不同的数字之和 题解: 11年多校的题,现在属于"人尽皆知傻逼题" 核心思想在于: 对于一个询问$[x,R]$ 无论$x$是什么 ...
随机推荐
- mysqldump命令使用详解
mysqldump是一个数据库备份程序 用法:mysqldump [options] [db_name [tbl_name ...]] 描述:mysqldump是一个客户端逻辑备份的工作,备份的SQL ...
- 九度OJ 1256:找出两个只出现了一次的数字 (位运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:568 解决:186 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 输入的 ...
- swift 使用运行时进行属性关联
1.用OC思想写swift代码真得很爽,swift需要的OC基本上都有,只不过略微改变了一下,例如以前的Foundation库前缀NS全部去掉了,等等...思想其实都一样,不过swift确实非常精简, ...
- Python菜鸟之路:sqlalchemy/paramiko进阶
前言:ORM中的两种创建方式 数据库优先:指的是先创建数据库,包括表和字段的建立,然后根据数据库生成ORM的代码,它是先创建数据库,再创建相关程序代码 代码优先:就是先写代码,然后根据代码去生成数据库 ...
- jQuery-Ajax-Timeout属性不生效的问题
async必须设置为async:ture,timeout才生效: 如果设置为async:false,则锁住浏览器,禁止一切操作,直到请求有返回结果.
- [luogu3393]逃离僵尸岛
[luogu3393]逃离僵尸岛 luogu 先把被禁止的点和新建的虚点n+1连0边 跑最短路,dis<=s的点价格为Q,否则为P, 再建图跑最短路 #define ll long long # ...
- Spring AspectJ AOP 完整示例
http://outofmemory.cn/java/spring/AOP/aop-aspectj-example-before-after-AfterReturning-afterThrowing- ...
- Spring之AOP由浅入深(转发:https://www.cnblogs.com/zhaozihan/p/5953063.html)
1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可 ...
- 改善程序与设计的55个具体做法 day9
条款23:宁以non-member.non-friend替换member函数 即 以非成员函数 非友元函数 替换成员函数. 直观上,面向对象应该尽可能的封装,封装数据.封装操作等等,所以这个条款可能有 ...
- 【三】MongoDB文档的CURD操作
一.插入文档 使用insert方法插入文档到一个集合中,如果集合不存在创建集合,有以下几种方法: db.collection.insertOne({}):(v3.2 new) #插入一个文档到集合中 ...