結果
| 問題 |
No.10 +か×か
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-08-11 00:31:29 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 234 ms / 5,000 ms |
| コード長 | 2,360 bytes |
| コンパイル時間 | 2,067 ms |
| コンパイル使用メモリ | 185,376 KB |
| 実行使用メモリ | 247,040 KB |
| 最終ジャッジ日時 | 2024-12-14 15:46:23 |
| 合計ジャッジ時間 | 4,169 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(ll i=0;i<n;i++)
#define repl(i,l,r) for(ll i=(l);i<(r);i++)
#define per(i,n) for(ll i=n-1;i>=0;i--)
#define perl(i,r,l) for(ll i=r-1;i>=l;i--)
#define fi first
#define se second
#define pb push_back
#define ins insert
#define pqueue(x) priority_queue<x,vector<x>,greater<x>>
#define all(x) (x).begin(),(x).end()
#define CST(x) cout<<fixed<<setprecision(x)
#define vtpl(x,y,z) vector<tuple<x,y,z>>
#define rev(x) reverse(x);
using ll=long long;
using vl=vector<ll>;
using vvl=vector<vector<ll>>;
using pl=pair<ll,ll>;
using vpl=vector<pl>;
using vvpl=vector<vpl>;
const ll MOD=1000000007;
const ll MOD9=998244353;
const int inf=1e9+10;
const ll INF=4e18;
const ll dy[8]={1,0,-1,0,1,1,-1,-1};
const ll dx[8]={0,-1,0,1,1,-1,1,-1};
template<class T> inline bool chmin(T& a, T b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template<class T> inline bool chmax(T& a, T b) {
if (a <= b) {
a = b;
return true;
}
return false;
}
set<string> ans;
void dfs(vector<vector<set<ll>>> &dp,ll now,ll t, string str, vl &v){
if(now==0){
if(t==0){
if(*str.rbegin()=='*')return;
str.pop_back();
rev(all(str));
ans.ins(str);
}
return;
}
for(auto p:dp[now][t]){
if(p==1)str+='+',dfs(dp,now-1,t-v[now-1],str,v),str.pop_back();
if(p==2)str+='*',dfs(dp,now-1,t/v[now-1],str,v);
}
}
int main(){
ll n,tot;cin >> n >>tot;
vl v(n);rep(i,n)cin >>v[i];//rev(all(v));
vector<vector<set<ll>>> dp(n+1,vector<set<ll>>(100010));
dp[n][tot].ins(-1);
for(int i=n;i>=1;i--){
rep(j,100010){
if(dp[i][j].empty())continue;
if(j-v[i-1]>=0)dp[i-1][j-v[i-1]].ins(1);
if(j%v[i-1]==0)dp[i-1][j/v[i-1]].ins(2);
}
}
/*rep(i,n+1){
rep(j,33){
if(!dp[i][j].empty())cout << 1 <<" ";
else cout <<0 <<" ";
}
cout << endl;
}*/
ll now=0;string ans;
rep(i,n){
if(dp[i][now].count(1)){
ans+='+';now+=v[i];
}
else{
ans+='*';now*=v[i];
}
}
cout << ans.substr(1) <<endl;
/*string s;
dfs(dp,n,tot,s,v);
//for(auto p:ans)cout << p <<endl;
cout << *ans.rbegin() <<endl;*/
}