結果
問題 | No.1495 パンの仕入れ |
ユーザー |
![]() |
提出日時 | 2021-05-05 08:50:45 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 232 ms / 2,000 ms |
コード長 | 1,651 bytes |
コンパイル時間 | 3,441 ms |
コンパイル使用メモリ | 180,956 KB |
最終ジャッジ日時 | 2025-01-21 07:10:28 |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 46 |
ソースコード
#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <cmath>#include <bitset>#include <vector>#include <map>#include <set>#include <queue>#include <deque>#include <algorithm>#include <complex>#include <unordered_map>#include <unordered_set>#include <random>#include <cassert>#include <fstream>#include <utility>#include <functional>#include <time.h>#include <stack>#include <array>#include <list>#include <atcoder/all>#define popcount __builtin_popcountusing namespace std;using namespace atcoder;typedef long long ll;typedef pair<int, int> P;int main(){int t; cin>>t;while(t--){int n, m;ll k;cin>>n>>m>>k;vector<ll> c(n), s(n);ll ans=0;for(int i=0; i<m; i++){int x;ll y;cin>>x>>y;x--;c[x]++;s[x]+=y;ans+=y*y;}ll l=-2e18, r=1e15;while(r-l>1){ll m=(l+r)/2;ll cnt=0;for(int i=0; i<n; i++){if(c[i]==0){if(m>=0) cnt=1e18;}else{if(m+2*s[i]+c[i]>0) cnt+=(m+2*s[i]+c[i])/(2*c[i]);}}if(cnt>=k) r=m;else l=m;}ll cnt1=0;for(int i=0; i<n; i++){if(c[i]==0) continue;if(r-1+2*s[i]+c[i]>0){ll x=(r-1+2*s[i]+c[i])/(2*c[i]);cnt1+=x;ans+=x*x*c[i]-2*s[i]*x;}}ans+=(k-cnt1)*r;cout<<ans<<endl;}return 0;}