数列 COGS1048:[Citric S2] 一道防AK好题
【题目描述】
Czy手上有一个长度为n的数列,第i个数为xi。
他现在想知道,对于给定的a,b,c,他要找到一个i,使得a*(i+1)*xi2+(b+1)*i*xi+(c+i)=0成立。
如果有多个i满足,Czy想要最小的那个i。
Czy有很多很多组询问需要你回答,多到他自己也不确定有多少组。所以在输入数据中a=b=c=0标志着Czy的提问的结束。
更加糟糕的是,Czy为了加大难度,决定对数据进行加密以防止离线算法的出现。
假设你在输入文件中读到的三个数为a0,b0,c0,那么Czy真正要询问的a=a0+LastAns,b=b0+LastAns,c=c0+LastAns.
LastAns的值是你对Czy的前一个询问的回答。如果这是第一个询问,那么LastAns=0。
所有的询问都将会按上述方式进行加密,包括标志着询问的结束的那个询问也是这样。
【输入】
输入文件为 seq.in
输入文件第一行包含一个整数n,表示数列的长度。
输入文件第二行包含n个整数,第i个数表示xi的值。
接下来若干行,每行三个数,表示加密后的a,b,c值(也就是上文所述的a0,b0,c0)
【输出】
输出文件为 seq.out
包含若干行,第i行的值是输入文件中第i个询问的答案。注意,你不需要对标志着询问结束的那个询问作答。
同时,标志着询问结束的询问一定是输入文件的最后一行。也就是,输入文件不会有多余的内容。
【输入输出样例】
seq.in |
seq.out |
5 -2 3 1 -5 2 -5 -4 145 -1 -6 -509 -9 -14 40 -3 -13 21 -3 -3 -3 |
5 4 3 3 |
【数据范围】
对于40%的数据,满足N<=1000,需要作出回答的询问个数不超过1000.
对于100%的数据,满足N<=50000,需要作出回答的询问个数不超过500000,xi的绝对值不超过30000,解密后的a的绝对值不超过50000,解密后的b的绝对值不超过10^8,解密后的c的绝对值不超过10^18.
【解题思路】
关于这个题目,我只想说一句出题人真心是够了!!!
如果按照丧病的出题人所谓防止出现离线算法在线处理的话复杂度大概是一个O(nq)的,然后能拿40
然而倒着去做这个题目就简单很多……很容易求得最后一个方程的解释-a[n+1],然后代入上一个方程就可以得到一个关于lastans的一次方程,解出这个值在代入……
1 program seq; 2 procedure open; 3 begin 4 assign(input,'seq.in'); 5 assign(output,'seq.out'); 6 reset(input); 7 rewrite(output); 8 end; 9 10 procedure closs; 11 begin 12 close(input); 13 close(output); 14 end; 15 16 var n,sum,x1,mid,now:int64; 17 i:longint; 18 a,b,x,lastans,c:array[0..500000] of int64; 19 begin 20 open; 21 read(n); 22 for i:=1 to n do 23 begin 24 read(x[i]); 25 end; 26 while not eof do 27 begin 28 inc(sum); 29 readln(a[sum],b[sum],c[sum]); 30 end; 31 //sort(1,n); 32 lastans[sum]:=-a[sum]; 33 for i:=sum-1 downto 2 do 34 begin 35 now:=lastans[i+1]; 36 x1:=x[now]; 37 lastans[i]:=(-(a[i]*(now+1)*sqr(x1)+(b[i]+1)*now*x1+(c[i]+now))) 38 div ((now+1)*sqr(x1)+(now*x1)+1); 39 40 end; 41 for i:=2 to sum do writeln(lastans[i]); 42 closs; 43 end.
View Code
转载于:https://www.cnblogs.com/wuminyan/p/4896044.html
数列 COGS1048:[Citric S2] 一道防AK好题相关推荐
- [3.3训练赛]One-Dimensional(矩阵快速幂),Freda的迷宫(无向图强连通分量+并查集),一道防AK好题
文章目录 T1:One-Dimensional title solution code T2:[NOIP模拟赛]Freda的迷宫 title solution code T3:[NOIP模拟赛]一道防 ...
- [TYVJ1827]『Citric II』一道防AK好题
时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 第二届『Citric杯』NOIP提高组模拟赛第一题 描述 Lemon认为在第一届『Citric』杯模拟赛中出的 ...
- [TYVJ 1927] 『Citric II』一道防AK好题 · 模拟
出题人真是丧(gan)心(de)病(piao)狂(liang)! 题面说的各种玄乎各种牛逼然而却毫无卵用 对于最后一组a b c ,因为要加上lastans以后=0,所以明显倒数第二组的解就是ans= ...
- 21南阳理工oj新生赛Round#5--这是一道防ak题
题目如下: 题目类型:数学类,思维类. AC代码如下: #include<iostream> #define ll long long using namespace std; int m ...
- 【hpuoj】防ak问题
1207: 杨八方的(防)AK问题 [数学] 时间限制: 1 Sec 内存限制: 128 MB 提交: 11 解决: 4 [ 提交][ 状态][ 讨论版] 题目描述 竟然把题目难度这么红果果地 ...
- 一道反序列化的CTF题分享
文章目录 一.源码分析 二.传参分析 三.小结 一.源码分析 首先看源代码: <?php Class readme{public function __toString(){return hig ...
- 一道小学奥数题的编程解法
一道小学奥数题的编程解法 这是一道小学奥数题,看到这一题后如果只给我笔和纸,我真的无从下手,不知怎么去把这些方框填出来.但借助编程,这道题就非常简单了.直接送上代码. C++程序代码 #include ...
- A. 这是一道简单的水题~
A. 这是一道简单的水题~ pbz最近沉浸在数学中无法自拔,他发现了一种非常有趣的数,这个数的十进制表示形式中只含有8和9,这个数有着很好的寓意,代表了pbz的梦想和期望,他想知道对于任意的给定的正整 ...
- 一道挺好玩的题,可用来作面试题【来自20111224 Topcoder DIVI 250题】
一道挺好玩的题,可用来作面试题[来自20111224 Topcoder DIVI 250题] 有N个数,编号1到n.按照以下规则进行删除数,求最后剩下的那个数.[1<= n <= 1000 ...
最新文章
- Sharding-JDBC 1.3.0发布——支持读写分离
- 【一周入门MySQL—1】数据库概述、数据定义、数据操作
- CVPR 2010 MOSSE:《Visual Object Tracking using Adaptive Correlation Filters.》论文笔记
- OpenCV解码格雷码模式
- linux中redis的主从
- 消息模式在实际开发应用中的优势
- 题目1065:输出梯形 (直接用循环控制输出)+题目1432:叠筐 (数组控制形状,最后输出数组)...
- 匹配中文字符的正则表达式: [u4e00-u9fa5](
- python3 批量定义多个变量_Python 3.8 新功能大揭秘
- SpringBoot 整合 Redis 哨兵机制_02
- VSIX 安装失败解决方案
- 计算机ps论文范文,ps论文范文
- 服务器密码过期进不去系统,登陆服务器密码过期
- KGB知识图谱完善保险行业的知识应用体系
- 通过淘宝司法拍卖购买房子,需要注意些什么?
- oracle怎么开启安全审计,安全审计产品:一项一项教你测等保2.0——Oracle安全审计...
- hotmail邮箱设置
- Java虚拟机——Parallel Scavenge收集器
- 15数字华容道解法 图解_数字华容道最后一行怎么解 最后一道解答技巧
- punycode转码以及UniCode编码表参考文章