結果
| 問題 |
No.31 悪のミックスジュース
|
| コンテスト | |
| ユーザー |
myanta
|
| 提出日時 | 2017-05-05 10:06:56 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,290 bytes |
| コンパイル時間 | 393 ms |
| コンパイル使用メモリ | 42,624 KB |
| 実行使用メモリ | 9,504 KB |
| 最終ジャッジ日時 | 2024-09-14 08:35:35 |
| 合計ジャッジ時間 | 7,465 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 2 TLE * 1 -- * 14 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:67:30: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
67 | scanf("%d", &c[i]);
| ~~~~~^~~~~~~~~~~~~
ソースコード
#include<cstdio>
#include<vector>
using namespace std;
using ll=long long;
using vi=vector<int>;
using vll=vector<ll>;
void solve_r(vi& v, vi& c, int m, int idx, ll ac, ll& result)
{
vi w;
if(idx>=v.size())
{
if(m==0 && result>ac)
{
result=ac;
}
return;
}
w=v;
for(int i=0;i<=m;i++)
{
w[idx]=v[idx]+i;
if(w[idx]>w[idx-1]) break;
solve_r(w, c, m-i, idx+1, ac+(ll)c[idx]*i, result);
}
}
ll solve(vi& v, vi& c, int m)
{
vi w;
ll ret;
ret=(ll)c[0]*m;
w=v;
for(int i=0;i<=m;i++)
{
w[0]=v[0]+i;
solve_r(w, c, m-i, 1, (ll)c[0]*i, ret);
}
return ret;
}
int main(void)
{
int n, v, i, m;
vi c, w;
vll s;
double ave, min_ave;
int min_idx, base_v;
ll result;
while(scanf("%d%d", &n, &v)==2)
{
s.resize(n);
w.resize(n);
c.resize(n);
for(i=0;i<n;i++)
{
scanf("%d", &c[i]);
w[i]=1;
s[i]=((i>0)?s[i-1]:0)+c[i];
}
if(v<=n)
{
printf("%lld\n", s[n-1]);
continue;
}
v-=n;
min_ave=c[0];
min_idx=0;
for(i=1;i<n;i++)
{
ave=(double)s[i]/(i+1);
if(min_ave>ave)
{
min_ave=ave;
min_idx=i;
}
}
base_v=v/(min_idx+1);
m=v-base_v*(min_idx+1);
for(i=0;i<=min_idx;i++)
{
w[i]+=base_v;
}
result=s[n-1]+s[min_idx]*base_v+solve(w, c, m);
printf("%lld\n", result);
}
return 0;
}
myanta