結果
問題 | No.449 ゆきこーだーの雨と雪 (4) |
ユーザー |
![]() |
提出日時 | 2016-11-19 00:11:39 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 141 ms / 5,000 ms |
コード長 | 2,012 bytes |
コンパイル時間 | 2,372 ms |
コンパイル使用メモリ | 210,572 KB |
実行使用メモリ | 31,604 KB |
最終ジャッジ日時 | 2024-09-22 10:15:52 |
合計ジャッジ時間 | 7,233 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;#define rep(i,n) for(int i = 0; i < (int)(n); i++)#define all(c) begin(c), end(c)#define dump(x) cerr << __LINE__ << ":\t" #x " = " << x << endl#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/tag_and_trait.hpp>using namespace __gnu_pbds;using Key = tuple<int,int>; // score, lastsubtypedef tree<Key,null_type,less<Key>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;int N;int star[100010];int T;int solved[100010];// user->int score[100010], lastsub[100010];int score_of[100010][26];unordered_map<string,int> f;int main(){cin.tie(0);ios::sync_with_stdio(0);while(cin >> N){memset(solved, 0, sizeof solved);memset(score_of, 0, sizeof score_of);memset(lastsub, 0, sizeof lastsub);memset(score, 0, sizeof score);rep(i,N) cin >> star[i];cin >> T;int id = 0;ordered_set tree;rep(i,T){string name;cin >> name;if(!f.count(name)){f.emplace(name, id++);}int man = f[name];// dump(man);char str[10];cin >> str;auto cur = make_tuple(-score[man], lastsub[man]);if(str[0] == '?'){// cout << "q" << -score[man] << ' ' << lastsub[man] << endl;int ord = tree.order_of_key(cur);cout << ord + 1 << '\n';} else {int prob = str[0] - 'A';int s = 50*star[prob] + 50*star[prob] / (0.8 + 0.2*(solved[prob]+1));++solved[prob];score_of[man][prob] = s;score[man] += s;lastsub[man] = i;auto nxt = make_tuple(-score[man], lastsub[man]);tree.erase(cur);tree.insert(nxt);}}}}