CodeForces 402B

注意这种情况:

4 1

4 1 8 3 4

两重for循环内还可以剪枝,比如2 1 4 3 6中遍历2时4、6符合条件,再往后的循环中46不必要在访问

原题链接:http://codeforces.com/problemset/problem/402/B

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<map>
#include<set>
#include<algorithm>
#include<vector>
#include<sstream>
using namespace std;
const int MAX_NUM = 1000+10;
int main()
{
  int n,k;
  int h[MAX_NUM],sub[MAX_NUM],vis[MAX_NUM];
  memset (vis,0,sizeof (vis));
  scanf ("%d%d",&n,&k);
  for (int i=0;i<n;i++)
	scanf ("%d",&h[i]);
  int base=0,num,mnum=0;
  for (int i=0;i<n;i++){
	num=0;
	if (h[i]-i*k<=0) continue;//数组内数字必须>0
	for (int j=0;j<n;j++){
	  if (h[j]==h[i]+(j-i)*k)
		num++;
	}
	if (num>mnum){
	  mnum=num;
	  base=i;
	}
  }
  //printf ("%d-%d-",base,mnum);
  printf ("%d\n",n-mnum);
  for (int i = 0; i < n; i++){
	int x=h[base]+(i-base)*k;
    if (h[i]-x>0)
	  printf ("- %d %d\n",i+1,h[i]-x);
	else if (h[i]-x<0)
	  printf ("+ %d %d\n",i+1,x-h[i]);
  }
  return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值