CodeForces 416D (贪心)
Problem Population Size
题目大意
给一个长度为n的序列,由 -1 和正整数组成,-1表示任意的正整数。
将序列分成若干段,使得任意段都是等差数列,求最少段数。
解题分析
可以发现对于某一段序列,越长越好。贪心加点,保证每段都是最长就可以了。
Tips:一段相同的数也可以算是等差数列。
参考程序
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std; #define N 200008
#define M 50008
#define LL long long
#define lson l,m,rt<<1
#define rson m,r+1,rt<<1|1
#define clr(x,v) memset(x,v,sizeof(x));
const int mo = ;
const int inf = 0x3f3f3f3f;
const int INF = ;
/**************************************************************************/
int n;
int a[N],r[N]; int main(){
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
int x=n+;
for (int i=n;i>=;i--){
r[i]=x;
if (~a[i]) x=i;
} int i=,j,k,d,num1,num2,ans=; while (i<=n){
//printf("%d\n",i );
if (a[i]==-){
j=r[i]; k=r[j];
if (j==n+) { ans++; break; } else num1=j-i;
num2=k-j;
if (k==n+){
/*if (min(num1,num2)>=a[j]) { ans+=2; break; }
else { ans++; break; }
*/
ans++; break;
}
else{
int flag=;
if ( (a[k]-a[j]) % (k-j)==){
d=(a[k]-a[j]) / (k-j);
if ( 1ll*a[j] - 1ll*d * (j-i) > ) flag =;
}
if (flag){
long long x=a[k];
for (i=k+;i<=n;i++){
x+=d;
if (x<=) break;
if (a[i]!=- && a[i]!=x) break;
}
ans++;
}
else{
/*if (min(num1,num2)>=a[j]) i=j+a[j]; else i=k;*/
ans++; i=k;
}
}
}
else
{
j=r[i];
if (j==n+) { ans++; break; } else num1=j-i-; int flag=;
if ( (a[j]-a[i]) % (j-i)==){
d=(a[j]-a[i]) / (j-i);
flag =;
}
if (flag){
long long x=a[j];
for (i=j+;i<=n;i++){
x+=d;
if (x<=) break;
if (a[i]!=- && a[i]!=x) break;
}
ans++;
}
else{
i=j;
ans++;
}
}
}
printf("%d\n",ans);
}
CodeForces 416D (贪心)的更多相关文章
- Population Size CodeForces - 416D (贪心,模拟)
大意: 给定$n$元素序列$a$, 求将$a$划分为连续的等差数列, 且划分数尽量小. $a$中的$-1$表示可以替换为任意正整数, 等差数列中必须也都是正整数. 贪心策略就是从前到后尽量添进一个等差 ...
- CodeForces - 893D 贪心
http://codeforces.com/problemset/problem/893/D 题意 Recenlty Luba有一张信用卡可用,一开始金额为0,每天早上可以去充任意数量的钱.到了晚上, ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划
There are n people and k keys on a straight line. Every person wants to get to the office which is l ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 828D) - 贪心
Arkady needs your help again! This time he decided to build his own high-speed Internet exchange poi ...
- CodeForces - 93B(贪心+vector<pair<int,double> >+double 的精度操作
题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...
- C - Ordering Pizza CodeForces - 867C 贪心 经典
C - Ordering Pizza CodeForces - 867C C - Ordering Pizza 这个是最难的,一个贪心,很经典,但是我不会,早训结束看了题解才知道怎么贪心的. 这个是先 ...
- Codeforces 570C 贪心
题目:http://codeforces.com/contest/570/problem/C 题意:给你一个字符串,由‘.’和小写字母组成.把两个相邻的‘.’替换成一个‘.’,算一次变换.现在给你一些 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- Codeforces 721D [贪心]
/* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给一列数a,可以进行k次操作,每次操作可以选取任意一个数加x或者减x,x是固定的数.求如何才能使得这个数列所有数乘积最小. 思路: 贪心...讨 ...
随机推荐
- SQL的常用语句
select * from g_members where id between '16' and '31' order by id desc 倒序排列 select * from g_members ...
- struts2视频学习笔记 18(自定义拦截器)
课时18 自定义拦截 因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defa ...
- jquery改变元素的值的函数text(),html(),val()
text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值,适合于标签中有value属性的标签. 代码: ...
- BZOJ3928 [Cerc2014] Outer space invaders
第一眼,我勒个去...然后看到n ≤ 300的时候就2333了 首先把时间离散化,则对于一个时间的区间,可以知道中间最大的那个一定要被选出来,然后把区间分成左右两份 于是区间DP就好了,注意用左开右开 ...
- php include
get_include_path 获取当前 include_path 配置选项的值,在当前代码目录未找到include文件时,则到include_path去include. set_include_ ...
- Eclipse如何设置代码提示功能
Windows→Preference→XML→XML Files→Editor→Content Assist→Auto Activation→Prompt when these characters ...
- 四种java代码静态检查工具
[转载]常用 Java 静态代码分析工具的分析与比较 转载自 开源中国社区 http://www.oschina.net/question/129540_23043 1月16日厦门 OSC ...
- 12个强大的Chrome插件
Chrome功能强大,也得益于其拥有丰富的扩展资源库.Chrome Web Store里有各种各样的插件,可以满足你使用Chrome时的各种要求.和Firefox一样,Chrome的扩展非常容易安装, ...
- POJ 1062 昂贵的聘礼 最短路 难度:0
http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...
- IIS CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.。。”--“拒绝访问
解决方案:给Windows下temp文件添IIS_USERS权限即可