結果
| 問題 |
No.3316 Make 81181819 with only 0,1,or 8
|
| コンテスト | |
| ユーザー |
DeltaStruct
|
| 提出日時 | 2025-07-12 13:50:48 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,345 bytes |
| コンパイル時間 | 2,863 ms |
| コンパイル使用メモリ | 251,588 KB |
| 実行使用メモリ | 7,724 KB |
| 最終ジャッジ日時 | 2025-10-25 16:58:19 |
| 合計ジャッジ時間 | 7,297 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | WA * 1 RE * 21 |
ソースコード
#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<pair<int,int>> tmp(57,make_pair(1e9,1e9)); tmp[0] = make_pair(0,0);
#define f(i) (tmp[i].first+tmp[i].second)
for (int i(0);i < 57;++i){
if (i+8<57&&f(i+8)>f(i)+1) tmp[i+8] = tmp[i],++tmp[i+8].first;
if (i+1<57&&f(i+1)>f(i)+1) tmp[i+1] = tmp[i],++tmp[i+1].second;
}
int q; cin >> q;
while(q--){
int n; cin >> n; string m = to_string(81181819-n); int s = m.size();
vector dp(s+1,vector<tuple<int,int,int>>(10,make_tuple(1e9,1e9,1e9))); dp[0][0] = make_tuple(0,-1,-1);
for (int i(0);i < s;++i) for (int k(0);k < 10;++k) if (get<0>(dp[i][k])!=1e9){
auto [a,b,c] = dp[i][k]; int j = m[s-i-1]-'0'-k; if (j<0) j += 10;
for (;j < 57;j+=10) if (get<0>(dp[i+1][(j+k)/10])>max(a,f(j))) dp[i+1][(j+k)/10] = make_tuple(max(a,f(j)),i,k);
}
auto [r,a,b] = dp[s][0]; int c = 0; vector R(r,vector<int>(s));
for (int i(0);i < s;++i){
int k = 0; c = c*10+(m[s-i-1]-'0'<b?10:0)+m[s-i-1]-'0'-b;
for (int j(0);j < tmp[c].first;++j) R[k++][s-i-1] = 8;
for (int j(0);j < tmp[c].second;++j) R[k++][s-i-1] = 1;
c = b,tie(ignore,a,b) = dp[a][b];
}
cout << r << endl;
for (auto& A:R){
int i(0);
for (;!A[i];++i);
for (;i < s;++i) cout << A[i];
cout << endl;
}
}
}
DeltaStruct