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是固定的数.求如何才能使得这个数列所有数乘积最小. 思路: 贪心...讨 ...
随机推荐
- 179. Largest Number -- 数字字符串比较大小
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- springmvc:BeanNameViewResolver访问内部资源视图对象和访问外部资源视图对象
<!-- 处理器映射器 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerM ...
- yii框架
Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...
- JS模块式开发
问题:js文件须严格保证加载顺序(比如上例的1.js要在2.js的前面),依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难! C语言中模块开发-include ...
- windows直接安装
- netbios wins dns LLMNR
NetBIOS名称 Network Basic Input/Output System (RFC-1001,1002)网络基本输入/输出系统协议 NetBIOS是一种高级网络接口,最初是在硬件中实 ...
- PostgreSQL数据库系统优点
PostgreSQL 是世界上可以获得的最先进的开放源码的数据库系统, 它提供了多版本并行控制,支持几乎所有 SQL 构件(包括子查询,事务和用户定 义类型和函数), 并且可以获得非常广阔范围的(开发 ...
- 小记:使用SharedPreferences存储来设置程序第一次进入欢迎界面,以后不会再进入欢迎界面。
SharedPreferences mSharedPreferences = this.getSharedPreferences(NAME, this.MODE_PRIVATE); boolean f ...
- 二模 (10)day1
第一题: 题目描述: 一个阅览室每天都要接待大批读者.阅览室开门时间是0,关门时间是T.每位读者的到达时间都不一样,并且想要阅读的刊物不超过5本.每位读者心里对自己想看的刊物都有一个排位,到达之后他会 ...
- jQuery对表单元素的取值和赋值操作代码
使用常规的思路:$(“#keyword”).value 取值是取不到的,因为此时$(‘#keydord’)已经不是个element,而是个jquery对象,所以应该使用:$(“#keyword”).v ...