1. 程式人生 > 實用技巧 >Codeforces Round #683 (Div. 2) Problem - A.Add Candies 題解

Codeforces Round #683 (Div. 2) Problem - A.Add Candies 題解

題目

題目連結

Codeforces Round #683 (Div. 2, by Meet IT) Problem - A.Add Candies

題目大意

現在有n個揹包。初始時候,第i個揹包裡面有i個糖。你目標是讓每個揹包裡的糖數量相等。

為了實現這個,你將:

  • 選擇一個數m, 1<= m<=1000
  • 進行m個操作。在第j個操作時候,你選擇一個揹包,然後除了選擇的揹包之外的所有揹包都增加j個糖。

你的目標是尋找一個合適的操作序列,使得每個揹包的糖數量相等。

  • 保證有這樣的操作序列存在。
  • 你不需要找到最小的m。
  • 如果有多個符合的操作序列,你可以輸出任何一個。

輸入

每個測試包含多個測試情況。

第一行為測試的數量t(1<=t<=100)。

每個測試情況只有1行,包含了一個整數n。

輸出

對於每個測試情況,輸出2行答案。

在第一行輸出m(1<=m<=1000)——你想進行的操作的數量。

在第二行輸出m個正整數a1,a2,...,am(1<=ai<=n)。在這裡,aj表示你第j個操作想選擇的第j個揹包。

輸入樣例

2
2
3

輸出樣例

1
2
5
3 3 3 1 2

題解

這個題跟著樣例手推一遍就能理解題意了。

題目其實很簡單,最關鍵的就在於明白給除了選中的那個揹包以外的揹包加j個糖相等於給選中的那個揹包減j個糖
明白了這點,就完事了。直接給第i個揹包減去i個糖果就行。

Then show the code.

//Problem - A.Add Candies
#include <stdio.h>

int main(){
    int t, n, m;
    scanf("%d", &t);
    while(t--){
        scanf("%d", &n);
        m = n;
        printf("%d\n", m);
        for(int i=1; i<=m; i++){
            printf("%d", i);
            if(i != m) printf(" ");
        }
        printf("\n");
    }

    return 0;
}