博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【noip模拟题】数列
阅读量:5015 次
发布时间:2019-06-12

本文共 1328 字,大约阅读时间需要 4 分钟。

Description

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。
所有的询问都将会按上述方式进行加密,包括标志着询问的结束的那个询问也是这样。

Input

输入文件第一行包含一个整数n,表示数列的长度。 
输入文件第二行包含n个整数,第i个数表示xi的值。
接下来若干行,每行三个数,表示加密后的a,b,c值(也就是上文所述的a0,b0,c0)

Output

包含若干行,第i行的值是输入文件中第i个询问的答案。注意,你不需要对标志着询问结束的那个询问作答。
同时,标志着询问结束的询问一定是输入文件的最后一行。也就是,输入文件不会有多余的内容。

Sample Input

5-2 3 1 -5 2-5 -4 145-1 -6 -509-9 -14 40-3 -13 21-3 -3 -3

Sample Output

5433

HINT

【数据范围】

对于40%的数据,满足N<=1000,需要作出回答的询问个数不超过1000.

对于100%的数据,满足N<=50000,需要作出回答的询问个数不超过500000,xi的绝对值不超过30000,解密后的a的绝对值不超过50000,解密后的b的绝对值不超过10^8,解密后的c的绝对值不超过10^18.

——————————————————————————————————————————————————————————————————

Solution

首先吐槽一下出题人,题目说了,这是一道不允许离线算法的题,然而,std却是离线算法,那么到底是什么离线算法呢?待我慢慢道来。

仔细看题,发现输入文件最后一行有玄机。由“所以在输入数据中a=b=c=0标志着Czy的提问的结束。”知道,输入文件的最后一行应该是(a0,b0,c0)而a0+lastans=a(a才是要询问的,且a=0)b、c以此类推。所以lastans=-a0

机智的读者可能已经看出我的意思:输入文件的最后一行竟然暗示了倒数第二行的ans!

由“a*(i+1)*xi2+(b+1)*i*xi+(c+i)=0”知,我们把i=刚刚求出来的lastans代入,又根据a=a0+lastans,可以把方程化为一个关于lastans的一元一次方程,然后把lastans解出来,再往前面代入就可以了。

最后赞一下出题人。^-^

转载于:https://www.cnblogs.com/yohanlong/p/6058153.html

你可能感兴趣的文章
angularjs学习笔记
查看>>
Runtime.getRuntime().exec()需要注意的地方
查看>>
context.Response.ContentType类型列表
查看>>
logging和json
查看>>
JS与JQ倒计时的写法
查看>>
lesson - 8 课程笔记 tar / gzip /bzip2 / xz /
查看>>
Excel—单元格引用
查看>>
linux- svn服务器
查看>>
Google Glass应用开发探索
查看>>
隐藏状态栏statusbar
查看>>
73-不要做别人的牺牲品.(2015.6.10)
查看>>
AtCoder AGC002F Leftmost Ball (DP、组合计数)
查看>>
day 4
查看>>
java 常用工具
查看>>
PhoneGap相关
查看>>
敏捷开发方法综述
查看>>
memchache memcached的区别
查看>>
elasticsearch索引加别名
查看>>
VBA保存时备份文件到指定目录
查看>>
任性就是没长大咯
查看>>