이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "books.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define for1(i,j,k) for(int i=j;i<=k;i++)
#define for2(i,j,k) for(int i=j;i>=k;i--)
#define for3(i,j,k,l) for(int i=j;i<=k;i+=l)
#define bit(n,i) ((n>>i)&1)
#define all(x) x.begin(),x.end()
//#pragma GCC optimize("O2,unroll-loops")
//#pragma GCC target("avx,avx2,bmi,bmi2,sse,sse2,sse3,ssse3,sse4,popcnt")
//#define int long long
typedef long long ll;
typedef pair<int,int> pii;
typedef double ld;
typedef pair<ld,ld> pdd;
typedef pair<ll,ll> pll;
const ll maxn=1e6+69;
const ll offset=1e9;
const ll block_sz=317;
const ll inf=1e18;
const ll mod=1e9+7;
long long sum,a[maxn],m;
deque<int> gg;
//void __attribute__((noreturn)) __attribute__((format(printf, 1, 2))) result(const char *msg, ...)
//{
// va_list args;
// va_start(args, msg);
// vfprintf(stderr, msg, args);
// fprintf(stderr, "\n");
// va_end(args);
// exit(0);
//}
//
//namespace
//{
// int N, K, S, sUsed;
// long long A;
// vector<long long> seq;
//}
//
//void impossible()
//{
// result("Impossible (not checked): %d book(s) skimmed", sUsed);
// exit(0);
//}
//
//long long skim(int pos)
//{
// printf("skim(%d): ", pos);
// if (pos<1 || pos>N) result("Invalid skim");
// printf("%lld\n", seq[pos]);
// sUsed++;
// if (sUsed>S) result("Out of books to skim");
// return seq[pos];
//}
//
//void answer(vector<int> v)
//{
// printf("answer({");
// for(int i = 0; i < (int) v.size(); ++i)
// {
// printf("%d", v[i]);
// if(i + 1 != (int) v.size()) printf(", ");
// }
// printf("})\n");
//
// if ((int) v.size() != K) result("Invalid answer");
// ll sum = 0;
// for(auto x: v) {
// if (x<1 || x>N) result("Invalid answer");
// sum += seq[x];
// }
// if (sum < A || 2*A<sum) result("Wrong answer");
//
// result("Correct: %d book(s) skimmed", sUsed);
// exit(0);
//}
bool check(int mid,int k)
{
a[mid]=skim(mid);
gg.pb(mid);
sum+=a[mid];
while (gg.size()>k)
{
int x=a[gg.front()];
sum-=x;
gg.pop_front();
}
if (sum/gg.size()<= m) return true;
else return false;
}
vector<int> take()
{
vector<int> kk;
while (!gg.empty())
{
kk.pb(gg.front());
gg.pop_front();
}
return kk;
}
namespace sub12
{
long long pfs[maxn];
vector<int> g;
void sol(int n,int k,long long A,int s)
{
for1(i,1,n) a[i]=skim(i);
for1(i,1,n)
{
pfs[i]=pfs[i-1]+a[i];
}
for1(i,k,n)
{
if (pfs[i]-pfs[i-k]>=A && pfs[i]-pfs[i-k]<=2*A)
{
for1(j,i-k+1,i) g.pb(j);
answer(g);
}
if (pfs[i]-pfs[i-k]> 2*A && pfs[i-1]-pfs[i-k-1]< A)
{
if (pfs[k-1]+a[i]<=2*A)
{
for1(j,1,k-1) g.pb(j);
g.pb(i);
answer(g);
}
else impossible();
}
}
}
};
void solve(int n,int k,long long a,int s)
{
if (n==s)
{
sub12::sol(n,k,a,s);
return;
}
m=(3*a/2)/k;
int l=1,r=n,mid;
while (l<=r)
{
int mid=l+r>>1;
if (check(mid,k)) l=mid+1;
else r= mid-1;
if (gg.size()==k && sum>=a && sum <=2*a)
{
answer(take());
}
}
impossible();
}
//int main()
//{
// if(scanf("%d %d %lld %d", &N, &K, &A, &S) != 4)
// result("Invalid input");
//
// seq.resize(N + 1);
// for(int i = 1; i <= N; ++i) {
// if(scanf("%lld", &(seq[i])) != 1) result("Invalid input");
// if(i>1 && seq[i]<=seq[i-1]) result("Invalid input");
// }
//
// solve(N, K, A, S);
//
// result("No answer");
//}
/*
15 3 42 15
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
*/
컴파일 시 표준 에러 (stderr) 메시지
books.cpp: In function 'bool check(int, int)':
books.cpp:89:21: warning: comparison of integer expressions of different signedness: 'std::deque<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
89 | while (gg.size()>k)
| ~~~~~~~~~^~
books.cpp:95:22: warning: comparison of integer expressions of different signedness: 'long long unsigned int' and 'long long int' [-Wsign-compare]
95 | if (sum/gg.size()<= m) return true;
| ~~~~~~~~~~~~~^~~~
books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:151:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
151 | int mid=l+r>>1;
| ~^~
books.cpp:154:22: warning: comparison of integer expressions of different signedness: 'std::deque<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
154 | if (gg.size()==k && sum>=a && sum <=2*a)
| ~~~~~~~~~^~~
books.cpp:148:17: warning: unused variable 'mid' [-Wunused-variable]
148 | int l=1,r=n,mid;
| ^~~| # | 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... |