제출 #291828

#제출 시각아이디문제언어결과실행 시간메모리
291828KastandaSails (IOI07_sails)C++11
80 / 100
46 ms2568 KiB
// M
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 100005;
int n, H[N], K[N], C[N];
inline bool Solve(int md)
{
        memset(C, 0, sizeof(C));
        for (int i = 1; i <= n; i ++)
                C[H[i] - K[i] + 1] ++, C[H[i] + 1] --;
        for (int i = 1; i < N; i ++)
                C[i] += C[i - 1];
        ll LeftOver = 0;
        for (int i = N - 1; i; i --)
        {
                int tmp = min(LeftOver, (ll)md - C[i]);
                LeftOver -= tmp;
                C[i] += tmp;
                assert(C[i] <= md);
        }
        return !LeftOver;
}
int main()
{
        scanf("%d", &n);
        for (int i = 1; i <= n; i ++)
                scanf("%d%d", &H[i], &K[i]);

        int le = 0, ri = N, md;
        while (ri - le > 1)
        {
                md = (le + ri) >> 1;
                if (Solve(md))
                        ri = md;
                else
                        le = md;
        }

        // How to do it with ri you ask? I don't know either ...
        Solve(ri);
        int ptr = 1;
        for (int i = N - 1; i; i --)
                if (C[i] == ri)
                {
                        while (ptr < i && C[ptr] == ri)
                                ptr ++;
                        if (ptr >= i)
                                break;
                        C[i] --;
                        C[ptr] ++;
                }
        ll tot = 0;
        for (int i = 1; i < N; i ++)
                tot += (ll)C[i] * (C[i] - 1) / 2;
        printf("%lld\n", tot);
        return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

sails.cpp: In function 'int main()':
sails.cpp:26:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   26 |         scanf("%d", &n);
      |         ~~~~~^~~~~~~~~~
sails.cpp:28:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   28 |                 scanf("%d%d", &H[i], &K[i]);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...