Rui and her functions

发布时间: 2017年3月27日 15:45   最后更新: 2017年3月28日 12:43   时间限制: 10000ms   内存限制: 256M

描述

Rui is magnificently gifted. Why does she not play with me tonight? Oh, she is obsessing

about n functions with n quartette of positive coefficients, denoted by ai,bi,ci,di(1≤i≤n)

respectively.

The i-th function fi is defined as fi(x)=(ai×bxi+ci)moddi. She asked Doc to find the

smallest xi in [1,m] for each function such that fi(xi) achieves the minimum of fi in [1,m].

That is say: fi(xi)=min{x∈[1,m]|fi(x)=mint∈[1,m]{fi(t)}}.

However n is large and Doc told her that possible xi for each function is unique (and Rui

is unique as well), and x1≤x2≤x3≤⋯≤xn (and that is as amazing as Rui).

Now she needs to find xi by herself.

输入

There are several test cases (no more than 64) and please process till EOF.
The first line in each case contains two integers n and m, 1≤n,m≤100000. Each of the
following n lines contains four integers ai,bi,ci,di respectively, where 0<ai,bi,ci≤di≤109.

输出

For each test case, print first the identifier of the test case, then n lines follow. The i-th
line contains the number xi for i-th function fi.

样例输入1 复制

3 5
373911025 1525760443 652804587 1767005941
120055457 159868670 59429374 196292251
1200581 955324 141748 2705431

样例输出1

Case #1
1
2
4

总感觉这道题目描述的不好,或者是我一直没有理解好。这个题目说的是每个f函数,x在[1,m]区间上的取值,f(x)都是不同的

然后让你求出每个f(x)取得最小值情况下的x,这个题有点特殊,数据保证了x1<=x2<=...<=xn我觉得这个数据不是随机出的,而是故意满足了这个条件。

由于x的单调性,我们可以这样考虑,如果我们先求出了下标n/2对应的函数对应的x,那么对于所有下标小于n/2的f函数,就只需要考虑[1,x[n/2]]之内的数就可以了,因为这些函数

的最小值对应的x不可能大于x[n/2]了,这样的话,再判断左右两边的f函数对应的x时,要检索的范围就缩小了一半。

因此,上来就用二分

void solve(int lp,int rp,int l,int r)//左闭右开 

表示的是要求区间[lp,rp)内的函数对应的最小值,这些最小值的取值再[l,r)里面

那么我们先求pos = (lp+rp)/2位置的函数,假设求得了x的下标为under

那么下一次分治的时候,

左边的区间变成了[lp,pos) 定义域变成了[l,under+1)因为x之间可以相等

右边的函数下标区间变成了[pos+1,rp),定义域变成了[under,r)

注意!!!!!

快速幂不能一直使用,否则会TTTTTTT,555555555我在这地方T了20次!!!归根到底还是菜啊

解决方案是,在定义域内检索最小值的时候,先用快速幂求出第一项,然后递归得到以后的

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long LL;
const int MAX = 100009;
const LL INF = 1e18;
LL a[MAX],b[MAX],c[MAX],d[MAX],ans[MAX];
int n,m;
LL mod_pow(LL x,LL n,LL mod)
{LL res = 1;while(n > 0){if(n&1) res = res*x%mod;x = x*x%mod;n >>= 1;}return res;
}
/*
LL calc(int x,int i)
{LL mod = d[i];return ((a[i]%mod*mod_pow(b[i],x,mod))%mod + c[i]%mod) % mod;
}
*/
void solve(int lp,int rp,int l,int r)//左闭右开
{//返回中间位置if(lp >= rp) return ;int pos = (lp + rp) / 2;LL sm = INF;int under;int lb = l;int up = r;LL tmp = mod_pow(b[pos],lb,d[pos]);for(int i = lb;i < up;i++){if(i != lb) tmp = tmp*b[pos]%d[pos];LL cc = ((a[pos]%d[pos]*tmp)%d[pos] + c[pos]%d[pos]) % d[pos];if(sm > cc)sm = cc,under = i;}ans[pos] = under;solve(lp,pos,l,under+1);solve(pos+1,rp,under,r);
}
main()
{int cas = 0;while(~scanf("%d%d",&n,&m)){for(int i = 0;i < n;i++)scanf("%lld%lld%lld%lld",a+i,b+i,c+i,d+i);LL sm = INF;printf("Case #%d\n",++cas);solve(0,n,1,m+1);for(int i = 0;i < n;i++) printf("%lld\n",ans[i]);} return 0;} /*
1 1
373911025 1525760443 652804587 1767005941*/

2016陕西省省赛 ACM Rui and her functions B 二分相关推荐

  1. [2016陕西省赛B] Rui and her functions

    2016陕西省赛B 给定n个函数,其中 fi(x)=(ai∗bxi+ci)moddi f_i(x) = (a_i*b_i^x+c_i) \mod d_i 求对于每个函数最小的 x x,使得fif_i取 ...

  2. 2016陕西省赛 Rui and her functions

    2016陕西省赛 Rui and her functions 题目链接:http://oj.xjtuacm.com/contest/4/problem/35/ 题目大意:每组数据给定$n$和$m$,定 ...

  3. 华为杯数学建模优秀论文_数学建模经典例题(2016年国赛B题与优秀论文)

    数学建模经典例题 (更多往期经典例题可点击文章最后相关推荐哦) 相关推荐 数学建模经典例题(2000年国赛B题与解题思路) 数学建模经典例题(2001年国赛A题与优秀论文) 数学建模经典例题(2001 ...

  4. 第七届蓝桥杯 2016年省赛真题(Java 大学C组)

    蓝桥杯 2016年省赛真题(Java 大学C组) 第一题:有奖猜谜 第二题:煤球数目 第三题:平方怪圈 第四题:骰子游戏 第五题:分小组 第六题:凑算式 第七题:搭积木 第八题:冰雹数 第九题:四平方 ...

  5. [Error]校赛/ACM初级纸质备战资料——刷题大总结

    校赛/ACM初级纸质备战资料 写在前面: 事先声明: 我这篇文章面向的是大一的计院新生,可以说在大一上并没有接触到太多的算法,这篇文章的资料也仅仅只能应付大一11月或12月举行的一些校赛选拔赛等小型基 ...

  6. 2016陕西省ACM省赛 HE 字符串处理 删除注释

    HE 发布时间: 2017年3月27日 18:28   最后更新: 2017年3月27日 18:30   时间限制: 1000ms   内存限制: 256M 描述 "Hi there, my ...

  7. 2016第七届ACM山东省赛

     "题目说的是输出编号.输出编号!!" "好,改好了." "交." 最后两分钟再一次提交了代码. no  -  wrong. 奋战到最后一秒 ...

  8. 2016河南省第九届ACM程序设计竞赛【正式赛真题】

    A题:表达式求值 时间限制: 1000 ms  |  内存限制: 65535 KB 描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, ...

  9. 2016陕西省ACM 热身体B 种类并查集

    Energy 发布时间: 2017年3月27日 11:31   最后更新: 2017年3月27日 18:30   时间限制: 1000ms   内存限制: 256M 描述 人类准备发射载人飞船前往火星 ...

最新文章

  1. 第三阶段 10_JavaWeb基础_
  2. java oracle exp_java中使用oracle的exp/imp导出、导入数据
  3. 这家公司不要求996,但照样市值万亿!
  4. c++ thread 内存泄漏_深入剖析ThreadLocal原理、内存泄漏及应用场景
  5. Excel单元格里面提取或去掉某些字符
  6. 中青旅:在线旅游行业如何选型数据分析平台?
  7. boost::math::barycentric_rational用法的测试程序
  8. php 开启imagick,PHP-Imagick:在Imagick项目上设置重力
  9. springboot2整合mysql5_SpringBoot2整合SSM框架详解
  10. 关于Kafka高性能的几个问题
  11. python变量及其作用域,闭包
  12. 使用MySQL管理工具-SQLyog9.63报错号码2003,超详细解析
  13. 怎么找网页源文件位置_html网页源代码是什么 如何查看网页源代码经验篇
  14. Kali Linux无线网络渗透测试教程(大学霸内部资料)
  15. mindoc快速搭建教程
  16. 公众号下面显示一排服务器,新技能get 微信公众号文章花式排版大法
  17. n维椭球体积公式_【栗子资料】高中生必看,高中年级所有数学公式大全
  18. 晶体二极管 三极管 MOS原理
  19. 李克秋 加盟天津大学 计算机学院,天津大学
  20. python- ASCII字符串转为16进制格式

热门文章

  1. leetcode202. 快乐数
  2. 「软件项目管理」一文详解软件配置管理计划
  3. HTML和css重要的知识点,html 和 css 基础知识点(一)(示例代码)
  4. [RabbitMQ]工作队列原理_代码实现
  5. python百分号用法_python百分号%—%s、%d、%f
  6. word List 31
  7. [51 nod 1238] 最小公倍数之和 V3(杜教筛)
  8. AcWing 201. 可见的点
  9. CF1183H Subsequences (hard version)
  10. 洛谷P7518:宝石(倍增、可撤销并查集)