Codeforces 658D Bear and Polynomials【数学】
题目链接:
http://codeforces.com/contest/658/problem/D
题意:
给定合法多项式,改变一项的系数,使得P(2)=0,问有多少种方法?
分析:
暴力求和然后依次试一试肯定不行啦~
仔细想想,多项式和为0,就是说存在某个2i,使得剩下的和等于x∗2i,(其中x 的绝对值小于等于k)。
那我们就从最小的开始看。把系数依次向后移。
如果系数ai为偶数,那么ai∗2i=(ai/2)∗2i+1,就令bi=0,否则bi=1,最终所有系数都移到了2n上。
如果某个bi为奇数的话,就是说不能完全转化成后面的数,无法用比他大的数表示他,那么后面的系数怎么变也抵消不了。所以我们只能看他自己和他前面的元素,通过改变这些元素的系数试图抵消它。
最后倒着算一遍,算出对于每个位置,可以抵消后面的数的系数,然后。。。减一下他自己。。。就可以了。。。。
然后注意一下倒着求和过程中res的绝对值大于INF的情况,直接break。
代码:
#include <cstdio>
const int maxn = 200005, INF = 1e18;
long long t[maxn],a[maxn], b[maxn];
int main (void)
{
int n, k;
long long res = 0;
scanf("%d%d",&n, &k);
for(int i = 0; i <= n; i++){
scanf("%I64d",&a[i]);
}
b[n] = a[n];
int flag;
for(int i = 0; i < n; i++){
int tmp = b[i] + a[i] ;
b[i + 1] += tmp / 2ll;
b[i] = tmp % 2ll;
}
for(int i = 0; i <= n; i++){
if(b[i]){flag = i; break;}//记录
}
int cnt = 0;
for(int i = n; i >= 0; i--){
res = res * 2ll + b[i];
if(res > INF || res < -INF )break;
if(i <= flag){
int ans = a[i] - res;
if(ans >= -k && ans <= k && (ans != 0 || i != n)){
cnt++;
}
}
}
printf("%d\n", cnt);
}
/*
5 5
0 -4 -2 -2 0 5
*/
智商压制,想的有点久。。。不过还是涨姿势!
Codeforces 658D Bear and Polynomials【数学】的更多相关文章
- codeforces 658D D. Bear and Polynomials(数学)
题目链接: D. Bear and Polynomials time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- CodeForces 639C Bear and Polynomials
Bear and Polynomials 题解: 如果改变一个其中的一个数,那么需要知道的是,前面的数都可以进到当前位来,如果过不来的话,那么就会因为前面有数导致无法变成0. 所以我们将前面的数不断向 ...
- VK Cup 2016 - Round 1 (Div. 2 Edition) D. Bear and Polynomials
D. Bear and Polynomials 题目连接: http://www.codeforces.com/contest/658/problem/D Description Limak is a ...
- Codeforces 385C Bear and Prime Numbers
题目链接:Codeforces 385C Bear and Prime Numbers 这题告诉我仅仅有询问没有更新通常是不用线段树的.或者说还有比线段树更简单的方法. 用一个sum数组记录前n项和, ...
- Codeforces 385B Bear and Strings
题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...
- Codeforces 680D Bear and Tower of Cubes 贪心 DFS
链接 Codeforces 680D Bear and Tower of Cubes 题意 求一个不超过 \(m\) 的最大体积 \(X\), 每次选一个最大的 \(x\) 使得 \(x^3\) 不超 ...
- Codeforces 385C Bear and Prime Numbers(素数预处理)
Codeforces 385C Bear and Prime Numbers 其实不是多值得记录的一道题,通过快速打素数表,再做前缀和的预处理,使查询的复杂度变为O(1). 但是,我在统计数组中元素出 ...
- [Codeforces 639F] Bear and Chemistry (Tarjan+虚树)(有详细注释)
[Codeforces 639F] Bear and Chemistry(Tarjan+虚树) 题面 给出一个n个点,m条边的无向图(不保证连通,可能有自环和重边),有q次询问,每次询问给出p个点和q ...
- Codeforces 791B Bear and Friendship Condition(DFS,有向图)
B. Bear and Friendship Condition time limit per test:1 second memory limit per test:256 megabytes in ...
随机推荐
- EEPROM介绍
EEPROM( Electrically Erasable Programmable Read Only Memory )全称是电气可擦除可编程只读存储器,是非易失存储器,可以访问到每个字节,容量比较 ...
- 跟随鼠标指针跑的div拖拽效果
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 51nod 1267 4个数和为0
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...
- COGS 1743. 忠诚
★ 输入文件:faithful.in 输出文件:faithful.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 老管家是一个聪明能干的人.他为财主工作了整整1 ...
- SEO 第二章
SEO第二章 1. 掌握搜索引擎工作原理(重点) 2. 了解百度算法 3. 关键词的分类 一.什么是搜索引擎? 搜索引擎是用来实现搜索服务的,说白了搜索引擎也属于一种网站. 浏览器是用来加载网站 ...
- 作为一个iOS Developer 为什么我不用Swift?
1.开始 在去年这个时候接手了一个iOS项目,项目主用Swift语言进行开发,对于部分第三方Objective C开源库则使用bridge的方式进行调用 当时项目的规模大概是不超过15个页面,功能也比 ...
- $.noconflict() 有什么用处
jQuery默认使用"$"操作符,prototype等其他框架也是是使用"$",于是,如果jQuery在其他库之后引入,那么jQuery将获得"$&q ...
- edquota - 编辑用户配额
SYNOPSIS(总览) edquota [ -p proto-username ] [ -u | -g ] username... edquota [ -u | -g ] -t DESCRIPTIO ...
- 多表单异步验证 可以用 Promise validate
https://www.jb51.net/article/140062.htm vue动态绑定组件子父组件多表单验证功能的实现代码 // 加载组件:每次下拉框监听则给changValue新赋值,如果下 ...
- 暑假集训 || 2-SAT
推荐论文:https://blog.csdn.net/zixiaqian/article/details/4492926 2-SAT问题是2判定性问题,给出n个集合,每个集合中有两个元素,两个元素之一 ...