博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
trees in a row
阅读量:4225 次
发布时间:2019-05-26

本文共 3296 字,大约阅读时间需要 10 分钟。

The Queen of England has n trees growing in a row in her garden. At that, the i-th (1?≤?i?≤?n) tree from the left has height ai meters. Today the Queen decided to update the scenery of her garden. She wants the trees' heights to meet the condition: for all i (1?≤?i?<?n), ai?+?1?-?ai?=?k, where k is the number the Queen chose.

Unfortunately, the royal gardener is not a machine and he cannot fulfill the desire of the Queen instantly! In one minute, the gardener can either decrease the height of a tree to any positive integer height or increase the height of a tree to any positive integer height. How should the royal gardener act to fulfill a whim of Her Majesty in the minimum number of minutes?

Input

The first line contains two space-separated integers: n, k (1?≤?n,?k?≤?1000). The second line contains n space-separated integers a1,?a2,?...,?an (1?≤?ai?≤?1000) — the heights of the trees in the row.

Output

In the first line print a single integer p — the minimum number of minutes the gardener needs. In the next p lines print the description of his actions.

If the gardener needs to increase the height of the j-th (1?≤?j?≤?n) tree from the left by x (x?≥?1) meters, then print in the corresponding line "+ j x". If the gardener needs to decrease the height of the j-th (1?≤?j?≤?n) tree from the left by x (x?≥?1) meters, print on the corresponding line "- j x".

If there are multiple ways to make a row of trees beautiful in the minimum number of actions, you are allowed to print any of them.

Sample test(s)

 

Input

4 1

1 2 1 5

Output
2

+ 3 2

- 4 1

Input
4 1

1 2 3 4

Output
0

Source:

 

#include 
#include
using namespace std;int main(){ freopen("treerow_testcases", "r", stdin); int caseNum; cin >> caseNum; while(caseNum--) { int treeNum,tolerance; cin >> treeNum >> tolerance; int *tree = new int [treeNum]; for(int i = 0; i < treeNum; i++) { cin >> tree[i]; } // int minChange = treeNum; int base = 0; for(int i = 0; i < treeNum; i++) { int changeNum = 0; // trees to change int height = tree[i] - i*tolerance; // the first tree's height after changed if(height <= 0) continue; // tree's height can't be zero // chose the i as the base, count the trees need to change for(int j = 0; j < treeNum; j++) { if(height != tree[j]) { changeNum++; } height += tolerance; } if(changeNum == 0) { base = i; minChange = changeNum; break; } else if(changeNum < minChange) { base = i; minChange = changeNum; } } cout << minChange << endl; int height = tree[base] - base*tolerance; for(int i = 0; i < treeNum; i++) { if(height != tree[i]) { cout << ((height > tree[i])? "+":"-") << i+1 << " "; cout << ((height > tree[i])? (height - tree[i]) : (tree[i] - height)) << endl; } height += tolerance; } // delete [] tree; } return 0;}

 

转载地址:http://ecuqi.baihongyu.com/

你可能感兴趣的文章
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
Web前端学习笔记——JavaScript之事件详解
查看>>
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
基于微区块链的V2X地理动态入侵检测
查看>>
面向V2C场景的ADAS数字孪生模型构建方法
查看>>
Comma2k19数据集使用
查看>>
面向自动驾驶车辆验证的抽象仿真场景生成
查看>>
一种应用于GPS反欺骗的基于MLE的RAIM改进方法
查看>>
自动驾驶汽车GPS系统数字孪生建模(一)
查看>>
自动驾驶汽车GPS系统数字孪生建模(二)
查看>>
CUDA 学习(五)、线程块
查看>>
CUDA 学习(八)、线程块调度
查看>>