이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const string ny[2] = {"No", "Yes"};
#include"books.h"
void solve(int n, int k, long long A, int S) {
ll cad[n+4]={ };
ll v[k+2]={ },ac=0;
v[k+1]=n+1;
for(int i=1; i<=k; i++)
{
cad[i]=skim(i);
v[i]=i;
ac+=cad[i];
}
for(int i=k; i>0; i--)
{
while(v[i]<k&&v[i]+1<v[i+1]&&ac<A&&ac-cad[v[i]]+cad[v[i]+1]<=2*A)
{
ac-=cad[v[i]];
v[i]++;
ac+=cad[v[i]];
}
if(ac>=A) break;
ll a=v[i]; ll b=v[i+1];
ac-=cad[v[i]];
while(abs(a-b)!=1)
{
ll m=(a+b)/2;
if(cad[m]==0) cad[m]=skim(m);
if(cad[m]+ac<=2*A)
a=m;
else b=m;
}
v[i]=b-1;
ac+=cad[v[i]];
//while(v[i]+1<v[i+1]&&ac<a&&ac-cad[v[i]]+cad[v[i]+1]<=2*a)
//{
// ac-=cad[v[i]];
// v[i]++;
// ac+=cad[v[i]];
//}
}
if(ac<A||ac>2*A)
{
impossible();
return;
}
vector<int> ans;
for(int i=1; i<=k; i++)
ans.push_back(v[i]);
answer(ans);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |