結果
| 問題 |
No.1687 What the Heck?
|
| コンテスト | |
| ユーザー |
Drice27149
|
| 提出日時 | 2021-09-24 22:31:04 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 852 bytes |
| コンパイル時間 | 530 ms |
| コンパイル使用メモリ | 64,132 KB |
| 実行使用メモリ | 16,040 KB |
| 最終ジャッジ日時 | 2024-07-05 10:57:32 |
| 合計ジャッジ時間 | 2,827 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 11 WA * 7 |
ソースコード
#include <cstdio>
#include <vector>
#include <set>
#include <queue>
using std::vector;
using std::set;
using std::priority_queue;
struct Node{
int d;
int need;
int t;
bool operator < (const Node& other) const{
return d < other.d;
}
};
int main(){
int n;
scanf("%d",&n);
vector<int> a(n);
for(int i = 0; i < n; i++) scanf("%d",&a[i]);
priority_queue<Node> Q;
long long ans = 0;
for(int i = 0; i < n; i++){
int d = (i+1)*2;
Q.push(Node{d, a[i]+1, 0});
ans -= 1ll*(i+1);
}
set<int> have;
for(int i = 1; i <= n; i++) have.insert(i);
while(Q.size()!=0){
Node cur = Q.top();
Q.pop();
auto find = have.lower_bound(cur.need);
if(find == have.end()){
if(cur.t == 0){
Node nxt{cur.d/2, cur.need-1, 1};
Q.push(nxt);
}
}
else{
ans += 1ll*cur.d;
have.erase(find);
}
}
printf("%lld\n",ans);
return 0;
}
Drice27149