QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#216273 | #5137. Tower | jason# | WA | 65ms | 4040kb | C++20 | 8.9kb | 2023-10-15 17:05:33 | 2023-10-15 17:05:33 |
Judging History
answer
#include<bits/stdc++.h>
#define pii pair<int,int>
#define x first
#define y second
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
namespace Fread{
const int SIZE=1<<16;
char buf[SIZE],*S,*T;
inline char getchar(){
if(S==T){
T=(S=buf)+fread(buf,1,SIZE,stdin);
if(S==T)return '\n';
}return *S++;
}
}
using namespace Fread;
namespace Fwrite{
const int SIZE=1<<16;
char buf[SIZE],*S=buf,*T=buf+SIZE;
inline void flush(){fwrite(buf,1,S-buf,stdout);S=buf;}
inline void putchar(char c){*S++ =c;if(S==T)flush();}
struct NTR {~NTR(){flush();}} ztr;
}
using namespace Fwrite;
#define getchar Fread::getchar
#define putchar Fwrite::putchar
namespace Fastio{
struct Reader{
template <typename T> Reader& operator >> (T &x){
x = 0;
short f = 1;
char c = getchar();
while(c<'0'||c>'9')
{if(c=='-')f*=-1;c=getchar();}
while(c>= '0'&&c<='9')
x=(x<<3)+(x<<1)+(c^48),c=getchar();
x *= f;
return *this;
}
Reader& operator>>(double &x){
x=0;
double t=0;
short f=1,s=0;
char c=getchar();
while((c<'0'||c>'9')&&c!='.')
{if(c=='-')f*=-1;c=getchar();}
while(c>='0'&&c<='9'&&c!='.')
x=x*10+(c^48),c=getchar();
if(c=='.')c=getchar();
else { x *= f; return *this; }
while(c>='0'&&c<='9')
t=t*10+(c^48),s++,c=getchar();
while (s--) t /= 10.0;
x = (x + t) * f;
return *this;
}
Reader& operator >> (long double &x){
x = 0;
long double t = 0;
short f = 1, s = 0;
char c = getchar();
while((c<'0'||c>'9')&&c!='.')
{if(c=='-')f*=-1;c=getchar();}
while (c >= '0' && c <= '9' && c != '.')
x = x * 10 + (c ^ 48), c = getchar();
if (c == '.') c = getchar();
else { x *= f; return *this; }
while (c >= '0' && c <= '9')
t = t * 10 + (c ^ 48), s++, c = getchar();
while (s--) t /= 10.0;
x = (x + t) * f;
return *this;
}
Reader& operator >> (__float128 &x){
x = 0;
__float128 t = 0;
short f = 1, s = 0;
char c = getchar();
while((c<'0'||c>'9')&&c!='.')
{if (c == '-')f*=-1;c=getchar();}
while (c >= '0' && c <= '9' && c != '.')
x = x * 10 + (c ^ 48), c = getchar();
if (c == '.') c = getchar();
else { x *= f; return *this; }
while (c >= '0' && c <= '9')
t = t * 10 + (c ^ 48), s++, c = getchar();
while (s--) t /= 10.0;
x = (x + t) * f;
return *this;
}
Reader& operator >> (char &c){
c = getchar();
while(c== ' '||c=='\n'||c=='\r')c=getchar();
return *this;
}
Reader& operator >> (char *str){
int len = 0;
char c = getchar();
while(c==' '||c=='\n'||c=='\r')c=getchar();
while (c!=' '&&c!='\n'&&c!='\r')
str[len++]=c,c=getchar();
str[len] = '0';
return *this;
}
Reader& operator >> (string &str){
str.clear();
char c = getchar();
while(c==' '||c=='\n'||c=='\r')c=getchar();
while(c!=' '&&c!='\n'&&c!='\r')
str.push_back(c),c = getchar();
return *this;
}
Reader() {}
} cin;
const char endl = '\n';
struct Writer{
const int Setprecision = 6;
typedef int mxdouble;
template <typename T> Writer& operator << (T x){
if (x == 0) { putchar('0'); return *this; }
if (x < 0) putchar('-'), x = -x;
static short sta[40];
short top = 0;
while (x > 0) sta[++top] = x % 10, x /= 10;
while (top>0)putchar(sta[top] + '0'),top--;
return *this;
}
Writer& operator << (double x){
if (x < 0) putchar('-'), x = -x;
mxdouble _ = x;
x -= (double)_;
static short sta[40];
short top = 0;
while(_>0)sta[++top]=_%10,_/=10;
if (top == 0) putchar('0');
while(top>0)putchar(sta[top]+'0'),top--;
putchar('.');
for(int i=0;i<Setprecision;i++)x*=10;
_ = x;
while(_>0)sta[++top]=_%10,_/=10;
for(int i=0;i<Setprecision-top;i++)putchar('0');
while (top > 0) putchar(sta[top] + '0'), top--;
return *this;
}
Writer& operator << (long double x){
if (x < 0) putchar('-'), x = -x;
mxdouble _ = x;
x -= (long double)_;
static short sta[40];
short top = 0;
while (_ > 0) sta[++top] = _ % 10, _ /= 10;
if (top == 0) putchar('0');
while (top > 0) putchar(sta[top] + '0'), top--;
putchar('.');
for (int i = 0; i < Setprecision; i++) x *= 10;
_ = x;
while (_ > 0) sta[++top] = _ % 10, _ /= 10;
for(int i=0;i<Setprecision-top;i++)putchar('0');
while (top > 0) putchar(sta[top] + '0'), top--;
return *this;
}
Writer& operator << (__float128 x){
if (x < 0) putchar('-'), x = -x;
mxdouble _ = x;
x -= (__float128)_;
static short sta[40];
short top = 0;
while (_ > 0) sta[++top] = _ % 10, _ /= 10;
if (top == 0) putchar('0');
while (top > 0) putchar(sta[top] + '0'), top--;
putchar('.');
for (int i = 0; i < Setprecision; i++) x *= 10;
_ = x;
while (_ > 0) sta[++top] = _ % 10, _ /= 10;
for(int i=0;i<Setprecision-top;i++)putchar('0');
while (top > 0) putchar(sta[top] + '0'), top--;
return *this;
}
Writer& operator <<(char c)
{putchar(c);return *this;}
Writer& operator << (char *str){
int cur = 0;
while (str[cur]) putchar(str[cur++]);
return *this;
}
Writer& operator << (const char *str){
int cur = 0;
while (str[cur]) putchar(str[cur++]);
return *this;
}
Writer& operator << (string str){
int st = 0, ed = str.size();
while (st < ed) putchar(str[st++]);
return *this;
}
Writer() {}
} cout;
}
using namespace Fastio;
#define cin Fastio::cin
#define cout Fastio::cout
#define endl Fastio::endl
const int N=2e5+5;
int a[N];
void slove(){
int n,m;
cin>>n>>m;
vector<int> st;
vector<int> v[n+1];
for(int i=1,tmp;i<=n;++i){
cin>>a[i];
tmp=a[i];
while(tmp){
st.push_back(tmp);
v[i].push_back(tmp);
tmp>>=1;
}
reverse(v[i].begin(),v[i].end());
}
sort(st.begin(),st.end());
st.erase(unique(st.begin(),st.end()),st.end());
int ans=5e5;
unordered_map<int,bool> mp;
bool flag=0;
for(auto &h:st){
// cout<<"h : "<<h<<endl;
int len=log2(h);
for(int i=len;i>=-len;--i){
int now=h+i;
if(now<=0) break;
if(mp[now]) continue;
mp[now]=1;
// cout<<"now : "<<now<<endl;
vector<int> tmp;
long long mn=0;
for(int i=1;i<=n;++i){
int id=lower_bound(v[i].begin(),v[i].end(),now)-v[i].begin();
int x,y;
if(id==v[i].size()){
x=1e9;
y=now-v[i][id-1];
}
else{
x=v[i][id]-now + v[i].size()-id-1;
y=now-v[i][id]/2 + v[i].size()-id;
}
// cout<<"x y : "<<x<<" "<<y<<endl;
if(a[i] < h) mn += h-a[i];
tmp.push_back(min(x,y));
}
if(mn>n*32){
flag=1;
break;
}
// sort(tmp.begin(),tmp.end());
nth_element(tmp.begin(),tmp.begin()+n-m,tmp.end());
int res=0;
for(int i=0;i<n-m;++i){
res += tmp[i];
if(res>ans) break;
}
ans = min(ans,res);
}
if(flag) break;
}
cout<<ans<<"\n";
}
signed main()
{
ios::sync_with_stdio(0);
int t;cin>>t;
while(t--){
slove();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3884kb
input:
3 2 0 2 6 5 0 1 2 3 4 5 5 3 1 2 3 4 5
output:
2 4 1
result:
ok 3 number(s): "2 4 1"
Test #2:
score: 0
Accepted
time: 4ms
memory: 3924kb
input:
10 272 118 11 14 49 94 71 62 46 45 74 22 15 36 7 37 27 35 96 85 75 78 76 64 23 59 17 35 71 28 96 82 5 66 2 48 57 31 88 10 61 73 79 23 19 52 39 76 48 98 5 39 48 51 90 90 60 27 47 24 24 56 48 27 39 21 38 18 20 9 62 83 47 15 51 22 73 74 7 80 64 60 86 74 59 7 84 38 99 31 42 60 52 41 63 88 59 90 77 40 68...
output:
454 3 436 108 570 636 994 227 656 50
result:
ok 10 numbers
Test #3:
score: 0
Accepted
time: 4ms
memory: 3720kb
input:
10 133 89 20 70 6 45 4 72 38 7 18 1 82 39 69 85 5 36 1 62 30 47 68 55 7 41 7 42 7 61 11 82 2 80 80 93 29 30 42 58 73 26 99 67 60 94 61 46 47 54 44 50 35 88 61 17 23 97 90 28 16 47 75 35 28 14 42 63 26 40 95 58 26 25 26 83 93 56 17 27 7 90 91 28 53 49 47 84 55 52 11 34 14 74 40 65 84 32 99 46 1 21 31...
output:
88 1361 128 246 29 83 3 677 96 382
result:
ok 10 numbers
Test #4:
score: 0
Accepted
time: 9ms
memory: 3728kb
input:
10 500 50 67 93 11 58 54 40 37 3 92 96 91 20 46 5 21 43 3 2 7 47 27 81 14 53 86 21 46 51 86 22 42 14 52 38 42 25 34 29 84 42 43 96 11 100 27 60 48 15 13 69 58 16 14 58 17 94 8 71 39 38 25 37 100 58 99 56 65 84 94 63 25 34 13 73 83 83 69 60 70 15 15 90 7 11 88 69 13 26 99 28 16 97 32 40 76 62 41 5 9 ...
output:
1608 169 144 983 1087 1317 882 75 32 1259
result:
ok 10 numbers
Test #5:
score: 0
Accepted
time: 26ms
memory: 3816kb
input:
10 500 414 503 505 103 380 946 153 952 386 890 306 522 147 499 784 643 121 264 344 549 72 299 314 45 688 97 747 442 528 752 830 335 78 159 218 748 331 259 375 479 883 202 402 595 738 430 184 874 762 864 743 733 209 821 616 868 543 314 161 100 638 439 943 732 962 243 776 803 423 749 367 731 594 993 9...
output:
338 2653 2857 809 1626 332 1328 490 1044 854
result:
ok 10 numbers
Test #6:
score: -100
Wrong Answer
time: 65ms
memory: 4040kb
input:
10 500 497 4249 4173 5055 5942 4090 1754 1523 5273 758 3522 8827 3775 6331 2729 8699 8797 5977 5435 6320 9188 5889 6562 9809 7595 6104 7480 2116 8715 2823 1990 425 5811 3347 2618 6119 3948 7172 7095 8017 5943 2036 87 6661 2099 885 3035 3745 8362 3919 2675 1314 8123 7254 328 106 2546 7540 9303 4333 9...
output:
3 2260 3254 4965 2322 2422 4862 1174 3671 877
result:
wrong answer 1st numbers differ - expected: '1', found: '3'