题意 有n个循环 给出x a b c xi+1=(a*x+b)%c 要求是从这些循环中各取一个数 使加和最大并且给出一个m 满足sum%m!=0

n的范围是4次方 c的范围是3次方 训练赛的时候看了一眼就觉得好难 稍微一处理就要超时..

天气好热 又wa了水题两次 十分不想做题QAQ 看着有点难就懒得想 掏出手机开始玩 坑了蕾姐一把 QAQ 以后再也不这样了

然而蕾姐还是机智的想出了几近正解的办法QAQ

在这个循环中 每两个紧挨着的数的间隔必定是一样的 这些数的值在0~C之间 是1000

我们对每个循环的最大值和次大值进行保存

可以看出 一旦出现sum%m 由于每个循环必定需要一个数 如果这个间隔%m==0 那么我们将一个大的数换为一个小的数 仍然会有sum%m==0 是浪费

如果间隔%m!=0 那么换次大值就可以达到使sum%m==0变为!=0

所以 我们把所有循环的最大值加起来作为一个sum 之后 找出最小且%k!=0的间隔

如果sum%m!=0直接输出就可以 如果==0 就减去间隔 由于间隔%k!=0 所以减去间隔的sum%k!=0

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
#include<iostream>
using namespace std;
/// 保存下来 每个循环的循环大小(最大的和第二大的) 以及该循环是否可以%k 记录最大的和第二大的地点
int xh[10050];
int maxw1[10050];
int maxw2[10050];
int vis[1050];
bool ok[10050];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(ok,false,sizeof(ok));
memset(vis,0,sizeof(vis));
int x,a,b,c;
int sum=0;
for(int i=1; i<=n; i++)
{
scanf("%d%d%d%d",&x,&a,&b,&c);
vis[x]=i;
int maxx=x;
int maxx2=-1;
int maxxid=1;
int maxx2id=-1;
int cnt=1;
while(1)
{
x=(a*x+b)%c;
if(vis[x]==i)
break;
vis[x]=i;
cnt++;
if(x>maxx)
{
maxx2=maxx;
maxx=x;
maxx2id=maxxid;
maxxid=cnt;
}
else if(x>maxx2)
{
maxx2=x;
maxx2id=cnt;
}
}
maxw1[i]=maxxid;
if(maxx2!=-1)
{
maxw2[i]=maxx2id;
int z=maxx-maxx2;
xh[i]=z;
if(z%m!=0)
ok[i]=true;
else ok[i]=false;
}
else
{
ok[i]=false;
}
sum+=maxx;
}
if(sum%m!=0)
{
printf("%d\n",sum);
for(int i=1; i<=n; i++)
{
printf("%d",maxw1[i]-1);
if(i==n)
printf("\n");
else printf(" ");
}
}
else
{
int minn=1005;
int w=-1;
for(int i=1; i<=n; i++)
{
if(ok[i])
{
if(xh[i]<minn)
{
minn=xh[i];
w=i;
}
}
}
if(minn!=1005)
{
maxw1[w]=maxw2[w];
printf("%d\n",sum-xh[w]);
for(int i=1; i<=n; i++)
{
printf("%d",maxw1[i]-1);
if(i==n)
printf("\n");
else printf(" ");
}
}
else
{
printf("-1\n");
}
}
}
}

  

最新文章

  1. C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
  2. Linux下的磁盘分割和文件系统
  3. redis 缓存技术与memcache的区别
  4. 亲历腾讯WEB前端开发三轮面试经历及面试题
  5. C#获取EF实体对象或自定义属性类的字段名称和值
  6. What is the difference between routine , method , procedure , function ? please explain it with example?
  7. Maven 手动添加 JAR 包到本地仓库
  8. Google Play笔记之上架
  9. centos7.2 yum安装lamp环境
  10. ActiveMQ中的安全机制 [转]
  11. Linux - Reset a MySQL root password
  12. 高效开发之SASS篇
  13. 201521123026《JAVA程序设计》第13周学习总结
  14. Spring-boot:5分钟整合Dubbo构建分布式服务
  15. lucene6+HanLP中文分词
  16. mysql 表结构转excel表格
  17. CocosCreator检测动作执行完毕的方法~之一吧,应该= =
  18. ln 链接命令 简要说明 软硬链接关系说明
  19. 【消息队列】kafka是如何保证消息不被重复消费的
  20. vue-router-3-嵌套路由

热门文章

  1. Floyd最短路算法
  2. python实现统计你一共写了多少行代码
  3. svn上想回滚代码怎么办?——svn merge 命令
  4. Xamarin.Android开发实践(八)
  5. FileHelper-文件操作辅助类
  6. CDT
  7. 为什么在SQL Server2008在视图中修改表结构无效
  8. hdu 1430+hdu 3567(预处理)
  9. 利用PowerDesigner比较2个数据库结构
  10. Loadrunner中web_custom_request使用场景