A.萌萌哒十五酱的情书~ | |||||
|
|||||
Description | |||||
因为十五酱实在是太萌了所以她经常会收到爱慕者的情书!!!!!!!!!!~ 当然因为情书太多了所以她没有时间都读完 于是她把给她的情书从左到右划分成n个区域,在每个区域的边界依次表上0~n,然后她将经行m次操作,每次她都会选择一个数字ai,把纸带沿这个数字当前所在的位置翻折(假如已经在边界上了那就相当于什么都不做啦~)。 十五想知道经过m次对折之后她还需要读多长的情书。 |
|||||
Input | |||||
多组数据 第一行为两个正整数n(1<=n<=10^18),m(m<=3000),表示纸带的长度和操作的次数。 接下来的一行为m个整数ai(1<=ai<=n),其中ai表示第i次选择的数字。 |
|||||
Output | |||||
多组数据输出 输出文件中每组数据输出一行为一个整数,即纸带最后的长度。 |
|||||
Sample Input | |||||
5 2 3 5 |
|||||
Sample Output | |||||
2 |
|||||
Hint | |||||
十五酱最萌了昂~ |
#include <iostream> using namespace std; struct mp { long long a,b; }; int main() { long long m,n,x,i,j,w[3003]; while(cin>>n>>m) { mp x,t[m]; x.a=0,x.b=n; for(i=0; i<m; i++)cin>>w[i]; for(i=0; i<m; i++) { if(w[i]>x.a&&w[i]<x.b) { if(w[i]>(x.a+x.b)/2.0) x.b=w[i]; else x.a=w[i]; } else { long long k = w[i]; for(j=0; j<i; j++) if(k<t[j].a) k = 2*t[j].a - k; else if(k>t[j].b) k = 2*t[j].b - k; if(k>x.a&&k<x.b) { if(k>(x.a+x.b)/2.0) x.b=k; else x.a=k; } } t[i].a = x.a ,t[i].b = x.b; } cout<<x.b - x.a<<endl; } return 0; }
RunID | ID | JudgeStatus | Language | Time | Memory | Length | SubmitTime |
79762 | A | Accepted | G++ | 138ms | 1196k | 1364B | 2014-03-23 16:56:02 |
HCPC2014校赛训练赛 6 A.萌萌哒十五酱的情书~ (3.23),布布扣,bubuko.com
HCPC2014校赛训练赛 6 A.萌萌哒十五酱的情书~ (3.23)
原文:http://blog.csdn.net/mpor2/article/details/21887051