結果
| 問題 |
No.3316 Make 81181819 with only 0,1,or 8
|
| コンテスト | |
| ユーザー |
DeltaStruct
|
| 提出日時 | 2025-07-12 14:36:07 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 6,000 ms |
| コード長 | 1,276 bytes |
| コンパイル時間 | 2,011 ms |
| コンパイル使用メモリ | 207,844 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-10-25 17:03:14 |
| 合計ジャッジ時間 | 3,059 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 22 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<pair<int,int>> tmp(49,make_pair(1e9,1e9)); tmp[0] = make_pair(0,0);
#define f(i) (tmp[i].first+tmp[i].second)
for (int i(0);i < 49;++i){
if (i+8<49&&f(i+8)>f(i)+1) tmp[i+8] = tmp[i],++tmp[i+8].first;
if (i+1<49&&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<pair<int,int>>(6,make_pair(1e9,1e9))); dp[0][0] = make_pair(0,-1);
for (int i(0);i < s;++i) for (int k(0);k < 6;++k) if (dp[i][k].first!=1e9){
int a = dp[i][k].first; int j = m[s-i-1]-'0'-k; if (j<0) j += 10;
for (;j < 49;j+=10) if (dp[i+1][(j+k)/10].first>max(a,f(j))){
dp[i+1][(j+k)/10] = make_pair(max(a,f(j)),k);
}
}
auto [r,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;
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,b = dp[s-i-1][b].second;
}
cout << r << endl;
for (auto& A:R){
int i(0);
for (;!A[i];++i);
for (;i < s;++i) cout << A[i];
cout << endl;
}
}
}
DeltaStruct