This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <cstdio>
using namespace std;
//int good[100005][305];
int chk[100005], cur[100005];
int p = 1;
int res[100005], rn;
// table[i][j] : 길이 j로 답이 i인 걸 만들 수 있는가?
void solve (int t) {
if(cur[t] < 0) {
if(chk[-cur[t]] < chk[t+cur[t]]) {
solve(-cur[t]);
solve(t + cur[t]);
}else{
solve(t + cur[t]);
solve(-cur[t]);
}
}else {
for(int i = 0; i < chk[t]; i++) {
res[++rn] = (i < cur[t]) ? p : 293-p;
}
p += cur[t]*p;
}
}
int main() {
for(int i = 1; i <= 100000; i++) chk[i] = (int)1e9;
for(int a = 1; a <= 300; a++) {
for(int b = 1; b <= 300-a; b++) {
// good[a*b][a+b] = a;
if(chk[a*b] > a+b) {
cur[a*b] = a;
chk[a*b] = a+b;
}
}
}
for(int i = 1; i <= 10000; i++) if(chk[i] == (int)1e9) {
for(int j = 1; j < i; j++) {
if(cur[j] < 0 && cur[i-j] < 0) continue;
if(chk[i] > chk[j] + chk[i-j]) {
cur[i] = -j;
(chk[i] = chk[j] + chk[i-j]);
}
}
}
int t; scanf("%d", &t);
solve(t);
printf("%d 293\n", rn);
for(int i = 1; i <= rn; i++) printf("%d ", res[i]);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |