提出 #40423022
ソースコード 拡げる
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <stack>
#include <cassert>
#include <map>
#include <numeric>
#include <cstring>
#include <set>
#include <ctime>
#include <queue>
#include <cmath>
#include <iomanip>
#include <iterator>
#include <bitset>
#include <unordered_map>
#include <complex>
#include <unordered_set>
#include <chrono>
#include <random>
#include <array>
#include <functional>
#include <random>
using namespace std;
const int maxN = 109;
const bool DBG = 0;
int N, a[maxN], plusN[2][maxN], plusMinus[2][maxN];
vector<int> curr;
vector<vector<int>> ans;
void addCurr() {
for (int i=1; i<=N; i++)
a[i] += curr[i];
ans.push_back(curr);
}
void addV(int v[]) {
for (int i=1; i<=N; i++)
curr[i] = v[i];
addCurr();
}
void print() {
printf("Yes\n");
printf("%d\n", ans.size());
for (auto v : ans) {
for (int i=1; i<=N; i++)
printf("%d ", v[i]);
printf("\n");
}
}
void init(int N) {
plusN[0][1] = plusN[1][1] = N;
for (int i=2; i<=N; i++)
plusN[0][i] = i - 1,
plusN[1][i] = N + 1 - i;
for (int i=1; i<=N; i++)
plusMinus[0][i] = i,
plusMinus[1][i] = N + 1 - i;
swap(plusMinus[0][1], plusMinus[0][2]);
}
void addN(int i) {
for (int lin=0; lin<2; lin++) {
swap(plusN[lin][1], plusN[lin][i]);
addV(plusN[lin]);
swap(plusN[lin][1], plusN[lin][i]);
}
}
int prm[maxN];
void plusIMinusJ(int i, int j) {
for (int lin=0; lin<2; lin++) {
prm[i] = 1, prm[j] = 2;
int cnt = 2;
for (int k=1; k<=N; k++)
if (k != i && k != j)
prm[k] = ++cnt;
for (int k=1; k<=N; k++)
curr[k] = plusMinus[lin][prm[k]];
addCurr();
}
}
int main() {
// freopen("../input", "r", stdin);
//freopen("../output", "w", stdout);
scanf("%d", &N), curr.resize(N + 1), init(N);
int sum = 0;
for (int i=1; i<=N; i++)
scanf("%d", &a[i]), sum = (sum + a[i]) % N;
if (sum != 0) {
for (int i=1; i<=N; i++)
curr[i] = i, sum = (sum + i) % N;
addCurr();
if (sum != 0) {
printf("No\n");
exit(0);
}
}
int steps = 0;
while(++steps < 1e5) {
int minPos = 1, maxPos = 1;
for (int i=2; i<=N; i++) {
if (a[i] > a[maxPos])
maxPos = i;
if (a[i] < a[minPos])
minPos = i;
}
if (a[maxPos] == a[minPos])
break;
if (a[maxPos] >= a[minPos] + N)
addN(minPos);
else
plusIMinusJ(minPos, maxPos);
if (DBG) {
for (int i = 1; i <= N; i++)
printf("%d ", a[i]);
printf("\n");
if (steps == 20)
break;
}
}
print();
return 0;
}
/*const int seed = time (0);
mt19937 gen (seed);
long long getRand(long long a, long long b) {return uniform_int_distribution < long long > (a, b) (gen);}*/
提出情報
コンパイルエラー
./Main.cpp: In function ‘void print()’:
./Main.cpp:48:14: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘std::vector<std::vector<int> >::size_type’ {aka ‘long unsigned int’} [-Wformat=]
48 | printf("%d\n", ans.size());
| ~^ ~~~~~~~~~~
| | |
| int std::vector<std::vector<int> >::size_type {aka long unsigned int}
| %ld
./Main.cpp: In function ‘int main()’:
./Main.cpp:93:10: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
93 | scanf("%d", &N), curr.resize(N + 1), init(N);
| ~~~~~^~~~~~~~~~
./Main.cpp:96:14: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
96 | scanf("%d", &a[i]), sum = (sum + a[i]) % N;
| ~~~~~^~~~~~~~~~~~~
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
500 / 500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 02_min_00.txt, 02_min_01.txt, 02_min_02.txt, 02_min_03.txt, 02_min_04.txt, 02_min_05.txt, 02_min_06.txt, 02_min_07.txt, 02_min_08.txt, 02_min_09.txt, 02_min_10.txt, 02_min_11.txt, 02_min_12.txt, 02_min_13.txt, 02_min_14.txt, 03_max_00.txt, 03_max_01.txt, 03_max_02.txt, 03_max_03.txt, 03_max_04.txt, 03_max_05.txt, 03_max_06.txt, 03_max_07.txt, 03_max_08.txt, 03_max_09.txt, 03_max_10.txt, 03_max_11.txt, 03_max_12.txt, 03_max_13.txt, 03_max_14.txt, 04_same_00.txt, 04_same_01.txt, 04_same_02.txt, 04_same_03.txt, 04_same_04.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
6 ms |
3616 KiB |
| 00_sample_01.txt |
AC |
2 ms |
3484 KiB |
| 00_sample_02.txt |
AC |
2 ms |
3680 KiB |
| 01_rnd_00.txt |
AC |
2 ms |
3480 KiB |
| 01_rnd_01.txt |
AC |
2 ms |
3620 KiB |
| 01_rnd_02.txt |
AC |
2 ms |
3616 KiB |
| 01_rnd_03.txt |
AC |
2 ms |
3532 KiB |
| 01_rnd_04.txt |
AC |
2 ms |
3628 KiB |
| 01_rnd_05.txt |
AC |
2 ms |
3476 KiB |
| 02_min_00.txt |
AC |
2 ms |
3648 KiB |
| 02_min_01.txt |
AC |
2 ms |
3696 KiB |
| 02_min_02.txt |
AC |
2 ms |
3708 KiB |
| 02_min_03.txt |
AC |
2 ms |
3532 KiB |
| 02_min_04.txt |
AC |
2 ms |
3476 KiB |
| 02_min_05.txt |
AC |
2 ms |
3612 KiB |
| 02_min_06.txt |
AC |
2 ms |
3512 KiB |
| 02_min_07.txt |
AC |
2 ms |
3696 KiB |
| 02_min_08.txt |
AC |
3 ms |
3620 KiB |
| 02_min_09.txt |
AC |
2 ms |
3744 KiB |
| 02_min_10.txt |
AC |
2 ms |
3492 KiB |
| 02_min_11.txt |
AC |
2 ms |
3644 KiB |
| 02_min_12.txt |
AC |
2 ms |
3556 KiB |
| 02_min_13.txt |
AC |
2 ms |
3508 KiB |
| 02_min_14.txt |
AC |
2 ms |
3612 KiB |
| 03_max_00.txt |
AC |
7 ms |
3772 KiB |
| 03_max_01.txt |
AC |
2 ms |
3564 KiB |
| 03_max_02.txt |
AC |
5 ms |
3732 KiB |
| 03_max_03.txt |
AC |
2 ms |
3628 KiB |
| 03_max_04.txt |
AC |
2 ms |
3792 KiB |
| 03_max_05.txt |
AC |
2 ms |
3656 KiB |
| 03_max_06.txt |
AC |
2 ms |
3480 KiB |
| 03_max_07.txt |
AC |
2 ms |
3516 KiB |
| 03_max_08.txt |
AC |
3 ms |
3652 KiB |
| 03_max_09.txt |
AC |
2 ms |
3600 KiB |
| 03_max_10.txt |
AC |
6 ms |
3792 KiB |
| 03_max_11.txt |
AC |
10 ms |
3756 KiB |
| 03_max_12.txt |
AC |
10 ms |
3964 KiB |
| 03_max_13.txt |
AC |
2 ms |
3684 KiB |
| 03_max_14.txt |
AC |
4 ms |
3776 KiB |
| 04_same_00.txt |
AC |
3 ms |
3572 KiB |
| 04_same_01.txt |
AC |
2 ms |
3576 KiB |
| 04_same_02.txt |
AC |
2 ms |
3600 KiB |
| 04_same_03.txt |
AC |
1 ms |
3600 KiB |
| 04_same_04.txt |
AC |
2 ms |
3648 KiB |