【codeforces 257D】Sum
【题目链接】:http://codeforces.com/problemset/problem/257/D
【题意】
给你n个数字;
这n个数字组成的数组满足:
a[i-1]<=a[i]<=2*a[i-1]
让你确定每个数字的符号(正或负);
然后把所有的数字都加起来;
把和记为s;
需要满足0<=s<=a[1];
【题解】
记最后一个数字的符号为+
然后sum=a[n]
由a[i]<=2*a[i-1]
可以得到
a[i]-a[i-1]<=a[i-1]
则让sum去减a[i-1];
可以保证0<=sum<=a[i-1];
然后再往前想;
假设再让sum-a[i-2];
则sum<=a[i-1]<=2*a[i-2]
则sum-a[i-2]<=a[i-2]
即也能满足|sum|<=a[i-2];
只不过此时不能保证sum大于等于0了;
但如果此时sum是小于0的;
我们完全可以把刚才选择的所有符号都取反;
这时就能保证sum小于等于a[i-2]且sum>=0了;
然后sum<=a[i-2]<=2*a[i-3]…
sum-a[i-3]<=a[i-3]….
以此类推;
当然,我们在减的时候,遇到sum<0的情况时;
可以先不用把之前选择的符号取反;
可以把减法改成加法;
这样取反之后就还是减法了;
等最后,发现还是小于0;
再一次性把所有的符号都取反;
【Number Of WA】
0
【反思】
光想着从前往后推了;
没想到从后往前推会比较好想一些.
这个式子从后往前模拟比较容易得到思路;
思维还是太局限了;
要往多方面想。
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e5+100;
int n,ans[N];
LL a[N];
int main(){
//Open();
Close();
cin >> n;
rep1(i,1,n){
cin >> a[i];
}
LL temp = a[n];
ans[n] = 1;
rep2(i,n-1,1){
if (temp > 0){
temp-=a[i];
ans[i] = 0;
}else{
temp+=a[i];
ans[i] = 1;
}
}
if (temp < 0){
rep1(i,1,n)
ans[i]^=1;
}
rep1(i,1,n)
if (ans[i]){
cout <<'+';
}else{
cout <<'-';
}
cout << endl;
return 0;
}
【codeforces 257D】Sum的更多相关文章
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【BZOJ3817/UOJ42】Sum(类欧)
[BZOJ3817/UOJ42]Sum(类欧) 题面 BZOJ UOJ 题解 令\(x=\sqrt r\),那么要求的式子是\[\sum_{d=1}^n(-1)^{[dx]}\] 不难发现,对于每个\ ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【codeforces 792C】Divide by Three
[题目链接]:http://codeforces.com/contest/792/problem/C [题意] 让你删掉最少的数字使得剩下的数字%3==0 [题解] 看代码..内置题解了现在. [完整 ...
- 【codeforces 514E】Darth Vader and Tree
[题目链接]:http://codeforces.com/problemset/problem/514/E [题意] 无限节点的树; 每个节点都有n个儿子节点; 且每个节点与其第i个节点的距离都是ai ...
- 【codeforces 779E】Bitwise Formula
[题目链接]:http://codeforces.com/contest/779/problem/E [题意] 给你n个长度为m的二进制数 (有一些是通过位运算操作两个数的形式给出); 然后有一个未知 ...
- 【codeforces 767C】Garland
[题目链接]:http://codeforces.com/contest/767/problem/C [题意] 一棵树; 树上的每个节点都有一个权值; 让你把一棵树切掉两条边; 然后把这棵树分成了3个 ...
- 【Codeforces 258D】 Count Good Substrings
[题目链接] http://codeforces.com/contest/451/problem/D [算法] 合并后的字符串一定是形如"ababa","babab&qu ...
随机推荐
- 如何使用图形界面Webmin管理linux服务器
出处:http://linux.cn/thread/11992/1/1/ 如何使用图形界面Webmin管理linux服务器 一台典型的linux服务器运行命令行环境中,并已经包括了一些用于安装和配置各 ...
- IOS - ImagePicker 连拍
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)sel ...
- 清空chrome浏览器缓存
缓存是一个很深奥的东西,虽然查了半天,还是没有搞清楚,希望以后可以遇到前端大神,可以给一个傻瓜化的通俗易懂的解释 已经上线的,后续有迭代的软件,迭代的版本不应该手动清除缓存了,因为太麻烦,对客户来说不 ...
- [NOIP2012提高组]开车旅行
题目:洛谷P1081.Vijos P1780.codevs1199. 题目大意:有n座海拔高度不相同的城市(编号1~n),两城市的距离就是两城市海拔之差.规定每次只能从编号小的城市走到编号大的城市. ...
- js 事件监听,执行某操作
<script language=javascript> var ie; var firefox; if (document.all) ie = true; else ie = false ...
- JAVA 重载方法,参数为NULL时,调用的处理 (精确性原则)
引子:大家可以思考一下下面程序的输出结果 public class TestNull { public void show(String a){ System.out.println("St ...
- linux环境下删除包含特殊字符的文件或目录
linux环境下删除包含特殊字符的文件或目录 ls -liUse find command as follows to delete the file if the file has inode nu ...
- Java基础学习总结(59)——30 个java编程技巧
1.return 一个空的集合,而不是 null 如果一个程序返回一个没有任何值的集合,请确保一个空集合返回,而不是空元素.这样你就不用去写一大堆 "if else" 判断null ...
- 安卓ProgressBar水平进度条的颜色设置
安卓系统提供了水平进度条ProgressBar的样式,而我们在实际开发中,差点儿不可能使用默认的样式.原因就是"太丑"^_^ 所以我们在很多其它的时候须要对其颜色进行自己定义,主要 ...
- Android开发工具---SQLiteManager插件
Android开发工具---SQLiteManager插件 效果图例如以下: 平时在开发过程中查看数据库都要把数据库文件导出来,然后再用其它工具打开,SQLiteManager插件则给予我们一些便利. ...