結果
| 問題 |
No.3316 Make 81181819 with only 0,1,or 8
|
| コンテスト | |
| ユーザー |
DeltaStruct
|
| 提出日時 | 2025-07-12 13:57:31 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,329 bytes |
| コンパイル時間 | 2,453 ms |
| コンパイル使用メモリ | 251,312 KB |
| 実行使用メモリ | 7,724 KB |
| 最終ジャッジ日時 | 2025-10-25 16:58:29 |
| 合計ジャッジ時間 | 6,667 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 3 WA * 2 RE * 17 |
ソースコード
#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[i]-'0'<b?10:0)+m[i]-'0'-b;
for (int j(0);j < tmp[c].first;++j) R[k++][i] = 8;
for (int j(0);j < tmp[c].second;++j) R[k++][i] = 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