题目链接:d. population size 题意:一些数字,要求分块,使得每一块都是等差数列,但是有些数字是-1,代表任意数字(但是要大于0),问最少需要分几块。 思路:贪心。每次找到相邻两个确定数字,并且记录下第一个数字前有多少个-1,就能确定出公差,然后利
        					题目链接:d. population size
题意:一些数字,要求分块,使得每一块都是等差数列,但是有些数字是-1,代表任意数字(但是要大于0),问最少需要分几块。
思路:贪心。每次找到相邻两个确定数字,并且记录下第一个数字前有多少个-1,就能确定出公差,然后利用公差去判断前面的-1能不能填进去,如果不能ans就多1,然后从第二个确定数字位置开始找,如果可以,就利用公差一直找到能放的最后一个位置,然后下次从那个位置开始找。
细节比较多,代码挫挫的:
#include #include const int n = 200005;__int64 n, i, j;__int64 a[n];int main() {	__int64 ans = 0;	scanf(%i64d, &n);	for (i = 0; i  0 && s1 > (a[s] - 1) / d) {			ans++;			i = e;			continue;		}		__int64 sum = a[s];		for (j = s + 1; j
   
 
   