답안 #353735

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
353735 2021-01-21T09:52:07 Z IloveN 코알라 (APIO17_koala) C++14
37 / 100
135 ms 876 KB
#include<bits/stdc++.h>

using namespace std;
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define eb emplace_back
#define all(vr) vr.begin(),vr.end()
#define vi vector<int>
#define vll vector<ll>
#include "koala.h"

int B[100],R[100];

int minValue(int N, int W) {
    // TODO: Implement Subtask 1 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    B[0]=1;
    playRound(B,R);
    int res;
    for (int i=0;i<N;i++)
        if (R[i]<=B[i]) res=i;
    return res;
}

int maxValue(int N, int W) {
    // TODO: Implement Subtask 2 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    vi vt;
    for (int i=0;i<N;i++) vt.eb(i);
    while (vt.size()>1)
    {
        for (int i=0;i<N;i++) B[i]=0;
        int val=W/vt.size();
        val=min(val,11);
        for (int x : vt) B[x]=val;
        playRound(B,R);
        vt.clear();
        for (int i=0;i<N;i++)
            if (R[i]>val) vt.eb(i);
    }
    return vt[0];
}

int greaterValue(int N, int W) {
    // TODO: Implement Subtask 3 solution here.
    // You may leave this function unmodified if you are not attempting this
    // subtask.
    int val[7]={1,2,3,4,5,6,8};
    int l=0,r=6,res=2;
    while (l<=r)
    {
        int mid=(l+r)/2;
        B[0]=B[1]=val[mid];
        playRound(B,R);
        int cnt=0;
        for (int i=0;i<=1;i++)
            if (R[i]>val[mid]) res=i,cnt++;
        if (cnt==1) break;
        if (cnt==2) l=mid+1;
        else r=mid-1;
    }
    return res;
}

int p[101];

bool check(int n,int c,int w,int val)
{
    int mx=n-c;
    mx=mx*(mx+1)/2;
    if (c*val<=w)
    {
        int r=n,l=max(1,n-c-(w-c*val));
        mx=max(mx,(l+r)*(r-l+1)/2);
    }
    for (int i=1;i<=min(c-1,w/val);i++)
    {
        int r=n,l=n-i+1;
        int tmp=(l+r)*(r-l+1)/2;
        int lef=w-i*val;
        lef=min(lef,n-c);
        tmp+=lef*(lef+1)/2;
        if (tmp>mx) return true;
    }
    return false;
}
void solve(int l,int r,int N,int W)
{
    if (l==r) return;
    int len=r-l+1;
    int val=W/len;
    for (int i=1;i<=W/len;i++)
        if (check(r,r-l+1,W-(N-r),i+1))
        {
            val=i;
            break;
        }
    for (int i=1;i<l;i++) B[p[i]-1]=0;
    for (int i=l;i<=r;i++) B[p[i]-1]=val;
    for (int i=r+1;i<=N;i++) B[p[i]-1]=0;
    playRound(B,R);
    vi vt1,vt2;
    for (int i=l;i<=r;i++)
        if (R[p[i]-1]<=val) vt1.eb(p[i]);
        else vt2.eb(p[i]);
    int mid=l+vt1.size()-1;
    for (int i=0;i<(int)vt1.size();i++) p[i+l]=vt1[i];
    for (int i=0;i<(int)vt2.size();i++) p[mid+1+i]=vt2[i];
    solve(l,mid,N,W);
    solve(mid+1,r,N,W);
}

void allValues(int N, int W, int *P) {
    if (W == 2*N) {
        // TODO: Implement Subtask 4 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    } else {
        // TODO: Implement Subtask 5 solution here.
        // You may leave this block unmodified if you are not attempting this
        // subtask.
    }
    for (int i=1;i<=N;i++) p[i]=i;
    solve(1,N,N,W);
    for (int i=1;i<=N;i++) P[p[i]]=i;
}

/*int main()
{
    //freopen("ss.inp","r",stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    return 0;
}*/

Compilation message

koala.cpp: In function 'int minValue(int, int)':
koala.cpp:28:12: warning: 'res' may be used uninitialized in this function [-Wmaybe-uninitialized]
   28 |     return res;
      |            ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 364 KB Output is correct
2 Correct 6 ms 364 KB Output is correct
3 Correct 6 ms 364 KB Output is correct
4 Correct 6 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 396 KB Output is correct
2 Correct 21 ms 364 KB Output is correct
3 Correct 19 ms 364 KB Output is correct
4 Correct 18 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 89 ms 500 KB Output is correct
2 Correct 98 ms 364 KB Output is correct
3 Correct 89 ms 364 KB Output is correct
4 Correct 86 ms 364 KB Output is correct
5 Correct 87 ms 364 KB Output is correct
6 Correct 86 ms 364 KB Output is correct
7 Correct 85 ms 532 KB Output is correct
8 Correct 87 ms 364 KB Output is correct
9 Correct 91 ms 364 KB Output is correct
10 Correct 85 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 364 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 135 ms 876 KB Output isn't correct
2 Halted 0 ms 0 KB -