Problem G. Generators

Input file: generators.in

Output file: generators.out
Little Roman is studying linear congruential generators — one of the oldest and best known pseudorandom number generator algorithms. Linear congruential generator (LCG) starts with a non-negative integer number x0 also known as seed and produces an infinite sequence of non-negative integer numbers xi (0 ≤ xi < c) which are given by the following recurrence relation:
xi+1 = (axi + b) mod c
here a, b, and c are non-negative integer numbers and 0 ≤ x0 < c. Roman is curious about relations between sequences generated by different LCGs. In particular, he has n different LCGs with parameters a(j), b(j), and c(j) for 1 ≤ j ≤ n, where the j-th LCG is generating a sequence x(j) i . He wants to pick one number from each of the sequences generated by each LCG so that the sum of the numbers is the maximum one, but is not divisible by the given integer number k. Formally, Roman wants to find integer numbers tj ≥ 0 for 1 ≤ j ≤ n to maximize s =Pn j=1 x(j) tj subject to constraint that s mod k 6= 0. Input The first line of the input file contains two integer numbers n and k (1 ≤ n ≤ 10000, 1 ≤ k ≤ 109). The following n lines describe LCGs. Each line contains four integer numbers x(j) 0 , a(j), b(j), and c(j) (0 ≤ a(j),b(j) ≤ 1000, 0 ≤ x(j) 0 < c(j) ≤ 1000). Output If Roman’s problem has a solution, then write on the first line of the output file a single integer s — the maximum sum not divisible by k, followed on the next line by n integer numbers tj (0 ≤ tj ≤ 109) specifying some solution with this sum. Otherwise, write to the output file a single line with the number −1.
Sample input and output
2 3

1 1 1 6

2 4 0 5

8

4

1

2 2

0 7 2 8

2 5 0 6

-1

In the first example, one LCG is generating a sequence 1, 2, 3, 4, 5, 0, 1, 2, ..., while the other LCG a sequence 2, 3, 2, 3, 2, ....

In the second example, one LCG is generating a sequence 0, 2, 0, 2, 0, ..., while the other LCG a sequence 2, 4, 2, 4, 2, ....

题目中的xi+1是指xi的下一项。

第四场训练赛的题,是欧洲赛的题,比赛地址:传送门

题意:n行,每行x,a,b,c,推公式,每一行在这一行当中取一个数使得他们的和最大且不能被k整除,如果不存在输出-1。

题解:记录第一大和第二大的数,并且第二大的数不能被k整除,求出所有行中与第一个数相差最小的这个第二个数。如果最大的数的所有总和被k整除,就用这个数去换,记得用数组记录选取的数的下标。鸽笼原理最多c个数,如果算过就可以跳出,用动态数组记录。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
const int maxn=1e6+;
const int mm=;
bool vis[maxn];
int f1[maxn],f2[maxn];
int main()
{
freopen("generators.in","r",stdin);
freopen("generators.out","w",stdout);
int n,k,ans=,tmp=mm,flag=-;
scanf("%d%d",&n,&k);
for(int i=; i<n; i++)
{ int x,a,b,c;
scanf("%d%d%d%d",&x,&a,&b,&c);
for(int j=; j<c; j++)
vis[j]=;
vector <int> data;
for(int j=; j<c; j++)
{
if(vis[x]) break;
vis[x]=;
data.push_back(x);
x=(a*x+b)%c;
}
int max1=-,max1i=-;
for (int i = ; i < data.size(); i++)
{
if (data[i] > max1)
{
max1 = data[i];
max1i = i;
}
}
ans+=max1;
int max2=-,max2i=-;
int tmp2=max1%k;
for (int i = ; i < data.size(); i++)
{
if (data[i] > max2&&(data[i]%k)!=tmp2)
{
max2 = data[i];
max2i = i;
}
}
f1[i]=max1i;
f2[i]=max2i;
int minn=max1-max2;
if(max2i!=-&&minn<tmp)
{
tmp=minn;
flag=i;
}
//cout<<max1<<" "<<max2<<endl;
}
if(ans%k==&&flag==-)
{
cout<<-<<endl;
}
else if(ans%k==)
{
f1[flag]=f2[flag];
ans-=tmp;
cout<<ans<<endl;
for(int i=;i<n-;i++)
cout<<f1[i]<<" ";
cout<<f1[n-]<<endl;
}
else
{
cout<<ans<<endl;
for(int i=;i<n-;i++)
cout<<f1[i]<<" ";
cout<<f1[n-]<<endl;
}
return ;
}

Gym 100851G Generators (vector+鸽笼原理)的更多相关文章

  1. CodeChef February Challenge 2018 Points Inside A Polygon (鸽笼原理)

    题目链接  Points Inside A Polygon 题意  给定一个$n$个点的凸多边形,求出$[ \frac{n}{10}]\ $个凸多边形内的整点. 把$n$个点分成$4$类: 横坐标奇, ...

  2. 1393 0和1相等串 鸽笼原理 || 化简dp公式

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1393 正解一眼看出来的应该是鸽笼原理.记录每个位置的前缀和,就是dp[i ...

  3. Codeforce-Ozon Tech Challenge 2020-C. Kuroni and Impossible Calculation(鸽笼原理)

    To become the king of Codeforces, Kuroni has to solve the following problem. He is given n numbers a ...

  4. HDU 5762 Teacher Bo (鸽笼原理) 2016杭电多校联合第三场

    题目:传送门. 题意:平面上有n个点,问是否存在四个点 (A,B,C,D)(A<B,C<D,A≠CorB≠D)使得AB的横纵坐标差的绝对值的和等于CD的横纵坐标差的绝对值的和,n<1 ...

  5. POJ_1065_Wooden_Sticks_(动态规划,LIS+鸽笼原理)

    描述 http://poj.org/problem?id=1065 木棍有重量 w 和长度 l 两种属性,要使 l 和 w 同时单调不降,否则切割机器就要停一次,问最少停多少次(开始时停一次). Wo ...

  6. poj 3370 鸽笼原理知识小结

    中学就听说过抽屉原理,可惜一直没机会见识,现在这题有鸽笼原理的结论,但其实知不知道鸽笼原理都可以做 先总结一下鸽笼原理: 有n+1件或n+1件以上的物品要放到n个抽屉中,那么至少有一个抽屉里有两个或两 ...

  7. poj 2356鸽笼原理水题

    关于鸽笼原理的知识看我写的另一篇博客 http://blog.csdn.net/u011026968/article/details/11564841 (需要说明的是,我写的代码在有答案时就输出结果了 ...

  8. UVA 10620 - A Flea on a Chessboard(鸽笼原理)

    UVA 10620 - A Flea on a Chessboard 题目链接 题意:给定一个跳蚤位置和移动方向.如今在一个国际象棋棋盘上,左下角为黑格,一个格子为s*s,推断是否能移动到白格子.问要 ...

  9. Gym - 100851G:Generators(人尽皆知但是WA题)

    题意:现在有函数,每一项Xi=(A*X(i-1)+B)%C.现在给定N个函数以及K:X0,A,B,C.然你再每个函数选择一个数,使得其和最大,而且不被K整除. X0,A,B,C<=1e3 :K& ...

随机推荐

  1. BZOJ-1934 Vote 善意的投票 最大流+建图

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1551 Solved: 951 [Submit][S ...

  2. Bringing up interface eth0: Error:Connection activation failed:Device not managed by NetworkManager

    Just follow the below steps and everything will be ok...   1. Remove Network Manager from startup Se ...

  3. 【bzoj2463】 谁能赢呢?

    www.lydsy.com/JudgeOnline/problem.php?id=2463 (题目链接) 题意 一个n*n的棋盘,开始时左上角有一个棋子,每次可以把棋子向4个方向移动,但不能移动到曾经 ...

  4. FluentData,它是一个轻量级框架,关注性能和易用性。

    http://www.cnblogs.com/zengxiangzhan/p/3250105.html FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.M ...

  5. android经典实战项目视频教程下载

    注:这是一篇转载的文章,原文具体链接地址找不到了,将原文分享如下,希望能对看到的朋友有所帮助! 最近在学习android应用方面的技术,自己在网上搜集了一些实战项目的资料,感觉挺好的,发布出来跟大伙分 ...

  6. Spring学习5-Spring整合JDBC及其事务处理(注解方式)

    一.整合的步骤   1.步骤一:首先要获得DataSource连接池(推荐使用B方式): 要对数据库执行任何的JDBC操作,需要有一个Connection.在Spring中,Connection对象是 ...

  7. 过滤器在Web开发应用------解决中文乱码

    src/com/Encoding.java package com; import java.io.IOException; import javax.servlet.Filter; import j ...

  8. PHP大批量插入数据库的3种方法和速度对比

    第一种,使用insert into 插入,最后显示为:23:25:05 01:32:05 也就是花了2个小时多! $params = array(‘value'=>'50′); set_time ...

  9. Jquery 表单操作

    文本框,文本区域: 获取值: 1.$("#txt").attr("value"); 2. $("txt").val(); 单选按钮: 获取值 ...

  10. C语言之参数传递

    学了四年的计算机,一直让自己比较苦恼的问题是C语言的参数传递问题,之所以说是苦恼,是因为在某年的一个学期,不幸接触到数据结构,光一个链表就把自己弄得死去活来的,而且自已一直就楞以为在操作的过程中,传递 ...