题意略。

思路:这个题目最重要的是那个不等式 a[i] <= a[i+1] <= 2 * a[i]  ,你会发现0 <= a[i+1]  -  a[i] <= a[i],令x = a[i+1] - a[i],那么对于a[i-1]来说,

当x = 0时,abs(x - a[i-1])== a[i - 1];当x = a[i]时,abs(x - a[i - 1])== a[i - 1]。也就是说,abs(x - a[i - 1]) <= a[i - 1]。

从n到1来遍历,我们总是令x = abs(x - a[i - 1]),到最后,0 <= abs(x - a[1]) <= a[1]也就自然满足了。

当x >= a[i - 1]时,我们应该在a[i - 1]前加 '-';反之,我们应该在x前加 '-'。

这个加'-'的过程,我开始是用树状数组区间修改点查询做的,后来发现TLE。由于加 '-' 是对后面整体和个体加的,我们可以开两个数组,一个记录单点,

一个记录整体,到时候遍历就可以达到O(n)的复杂度了。

详见代码:

#include<bits/stdc++.h>
#define maxn 100050
using namespace std;
typedef long long LL; LL a[maxn];
int mark[maxn],t[maxn],n; int main(){
scanf("%d",&n);
for(int i = ;i <= n;++i) scanf("%lld",&a[i]);
LL x = a[n] - a[n - ];
mark[n - ] = -;
for(int i = n - ;i >= ;--i){
if(x < a[i]){
x = a[i] - x;
t[i + ] = ;
}
else{
x -= a[i];
mark[i] = -;
}
}
int sum = ;
for(int i = ;i <= n;++i){
int temp;
sum += t[i];
temp = sum + mark[i];
if(temp < ) temp = ;
printf("%c",(temp & ) ? '-' : '+');
}
printf("\n");
return ;
}

Codeforces 257D的更多相关文章

  1. 【codeforces 257D】Sum

    [题目链接]:http://codeforces.com/problemset/problem/257/D [题意] 给你n个数字; 这n个数字组成的数组满足: a[i-1]<=a[i]< ...

  2. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  3. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  4. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  5. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  6. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  7. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  8. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  9. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

随机推荐

  1. Linux修改主机名脚本-不重启-支持RedHat、SUSE

    需要用脚本修改主机名,涉及RedHat.SUSE系统,并且要求修改立即生效且不重启,下面就是我的脚本. 使用脚本的方法如下: 1 首先创建一个脚本文件,假如命名为ModifyHostname.sh: ...

  2. junit设计模式--组合模式

    Composite,英语翻译下,复合,组合. 组合模式有时候又叫做部分-整体模式,它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户 ...

  3. 无废话XML--XML约束(DTD)

    基本术语     一.序言Prolog:包括XML声明(XML Declaration)和文档类型声明(Document Type Declaration).     二.良构(well-formed ...

  4. Android ui 透明度设置

    格式如#00FFFFFF,前两位代表不透明度的十六进制.00表示完全透明,FF就是全不透明.依次递增. <?xml version="1.0" encoding=" ...

  5. android EditText设置

    EditText输入的文字为电话号码 Android:phoneNumber=”true”  //输入电话号码 //自动弹出键盘 ((InputMethodManager)getSystemServi ...

  6. win10的系统下怎么设置网页的字体变大

    对于 EDGE 浏览器: 点击右上角的设置图标(三个小点)--缩放,点击 + 号放大字体.   本回答由提问者推荐

  7. 【转】TCHAR

    TCHAR 就是当你的字符设置为什么就是什么例如: 当程序编译为    ANSI,    TCHAR 相当于 CHAR当程序编译为 UNICODE, TCHAR 相当于WCHAR char       ...

  8. MongoDB 基本操作学习笔记

    // 查看所有数据库 show dbs // amdin 0.000GB // local 0.000GB // 使用数据库 use admin // switched to db admin // ...

  9. Html5五子棋

    1.效果图 2.代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  10. 实现兼容document.querySelector的方法

    var querySelector = function(selector) { //TODO 先简单兼容,后续继续扩展: var element = null; if(document.queryS ...