QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#265945 | #2346. Miniature Golf | InfinityNS# | AC ✓ | 1839ms | 5656kb | C++14 | 2.7kb | 2023-11-25 22:52:19 | 2023-11-25 22:52:19 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
const int N=505;
const int H=55;
int a[N][H],n,h;
const ll lim=1e18;
ll GetVal(int i,int isz,int j,int jsz){
if(isz>h && jsz>h)return lim;
if(isz>h || (jsz<=h && a[i][isz]>a[j][jsz])){
return a[j][jsz];
}else{
return a[i][isz];
}
}
ll Get(int k,ll n,ll x){
return x*k+n;
}
vector<pair<ll,int>> evs;
void AddInterval(ll L, ll R){
//printf("Add interval [%lld %lld]\n",L,R);
evs.pb({L,1});
evs.pb({R+1,-1});
}
ll Inter1(int ik,ll in,int jk,ll jn){
ll dn=in-jn;
ll dk=jk-ik;
if(dk<0)dk=-dk,dn=-dn;
return dn/dk;
}
ll Inter2(int ik,ll in,int jk,ll jn){
ll dn=in-jn;
ll dk=jk-ik;
if(dk<0)dk=-dk,dn=-dn;
return (dn+dk-1)/dk;
}
void Solve(int ik,ll in,int jk,ll jn,ll from,ll to){
if(from>to)return;
//printf("Solve [%lld %lld]\n",from,to);
ll fi=Get(ik,in,from);
ll fj=Get(jk,jn,from);
ll ti=Get(ik,in,to);
ll tj=Get(jk,jn,to);
if(fi>=fj && ti>=tj){
AddInterval(from,to);
}else if(fi>=fj){
AddInterval(from,Inter1(ik,in,jk,jn));
}else if(ti>=tj){
AddInterval(Inter2(ik,in,jk,jn),to);
}
}
int main(){
scanf("%i %i",&n,&h);
for(int i=1;i<=n;i++){
for(int j=1;j<=h;j++){
scanf("%i",&a[i][j]);
}
sort(a[i]+1,a[i]+1+h);
}
for(int i=1;i<=n;i++){
evs.clear();
for(int j=1;j<=n;j++){
if(i==j)continue;
int isz=1,jsz=1;
ll in=0,jn=0;
int ik=h,jk=h;
ll from=1,to=GetVal(i,isz,j,jsz)-1;
Solve(ik,in,jk,jn,from,to);
while(isz<=h || jsz<=h){
ll val=GetVal(i,isz,j,jsz);
while(isz<=h && a[i][isz]==val){
ik--;
in+=a[i][isz];
isz++;
}
while(jsz<=h && a[j][jsz]==val){
jk--;
jn+=a[j][jsz];
jsz++;
}
ll from=val,to=GetVal(i,isz,j,jsz)-1;
Solve(ik,in,jk,jn,from,to);
}
}
evs.pb({1,1});
evs.pb({lim,1});
sort(evs.begin(),evs.end());
int now=0;
ll last=1;
int ans=n;
for(auto ev:evs){
if(last<ev.first){
//printf("(%lld %lld) -> %i\n",last,ev.first-1,now);
ans=min(ans,now);
}
now+=ev.second;
last=ev.first;
}
printf("%i\n",ans);
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3788kb
Test #2:
score: 0
Accepted
time: 0ms
memory: 3756kb
Test #3:
score: 0
Accepted
time: 0ms
memory: 3868kb
Test #4:
score: 0
Accepted
time: 0ms
memory: 3856kb
Test #5:
score: 0
Accepted
time: 0ms
memory: 3872kb
Test #6:
score: 0
Accepted
time: 0ms
memory: 3768kb
Test #7:
score: 0
Accepted
time: 0ms
memory: 3800kb
Test #8:
score: 0
Accepted
time: 3ms
memory: 4064kb
Test #9:
score: 0
Accepted
time: 7ms
memory: 3896kb
Test #10:
score: 0
Accepted
time: 0ms
memory: 3932kb
Test #11:
score: 0
Accepted
time: 1ms
memory: 3816kb
Test #12:
score: 0
Accepted
time: 12ms
memory: 3928kb
Test #13:
score: 0
Accepted
time: 0ms
memory: 3864kb
Test #14:
score: 0
Accepted
time: 2ms
memory: 3972kb
Test #15:
score: 0
Accepted
time: 12ms
memory: 3916kb
Test #16:
score: 0
Accepted
time: 27ms
memory: 4028kb
Test #17:
score: 0
Accepted
time: 1839ms
memory: 5540kb
Test #18:
score: 0
Accepted
time: 1822ms
memory: 5456kb
Test #19:
score: 0
Accepted
time: 1728ms
memory: 5524kb
Test #20:
score: 0
Accepted
time: 1717ms
memory: 5436kb
Test #21:
score: 0
Accepted
time: 1719ms
memory: 5632kb
Test #22:
score: 0
Accepted
time: 1710ms
memory: 5476kb
Test #23:
score: 0
Accepted
time: 1358ms
memory: 5520kb
Test #24:
score: 0
Accepted
time: 1356ms
memory: 5440kb
Test #25:
score: 0
Accepted
time: 1351ms
memory: 5512kb
Test #26:
score: 0
Accepted
time: 1362ms
memory: 5656kb
Test #27:
score: 0
Accepted
time: 1358ms
memory: 5460kb