Submission #1825905


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
struct SHIT
{
    int one,two;
    bool operator<(const SHIT  &b)const {
        if(this->one!=b.one) return (this->one<b.one);
        return (this->two<b.two);
    }
}shit[maxn];
bool cmp(SHIT a,SHIT b)
{
    if(a.one+a.two!=b.one+b.two)
    return a.one+a.two<b.one+b.two;
    return a.one<b.one;
}
map<SHIT,bool>mp;
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&shit[i].one,&shit[i].two);
    }
    if(!(shit[1].one==shit[2].two&&shit[1].one==0&&shit[1].two!=0)){
        puts("-1");
        return 0;
    }
    int mn=shit[1].two;
    int ans=0;
    ans++;
    if(n==2){
        if(mn==1){
            puts("1");
        }
        else{
            puts("-1");
        }
        return 0;
    }
    for(int i=3;i<=n;i++)
    {
        if(shit[i].one==0||shit[i].two==0||shit[i].one+shit[i].two<mn){
            puts("-1");
            return 0;
        }
    }
    sort(shit+3,shit+n+1,cmp);
    mp.clear();
    mp[shit[1]]=1;
    mp[shit[2]]=1;
    for(int i=3;i<=n;)
    {
        int j=i+1;
        while(j<=n&&shit[j].one+shit[j].two==shit[i].one+shit[i].two)
            j++;
        for(int k=i;k<j;k++)
            mp[shit[k]]=1;
        if(shit[i].one+shit[i].two==mn){
            for(int k=i;k<j;k++)
            {
                SHIT tmp1,tmp2;
                tmp1.one=shit[k].one-1;
                tmp1.two=shit[k].two+1;
                tmp2.one=shit[k].one+1;
                tmp2.two=shit[k].two-1;
                //printf("%d %d\n",mp.count(tmp1),mp.count(tmp2));
                if(mp.count(tmp1)&&mp.count(tmp2)){
                    continue;
                }
                else{
                    puts("-1");
                    return 0;
                }
            }
            ans=ans+(j-mn+1)*2+mn;
        }
        else{
            bool flag;
            for(int k=i;k<j;k++)
            {
                SHIT tmp1,tmp2;
                tmp1.one=shit[k].one-1;
                tmp1.two=shit[k].two-1;
                if(mp.count(tmp1)){
                    ans++;continue;
                }
                if(shit[k].one==shit[k-1].one&&shit[k].two==shit[k-1].two){
                    ans+=2;
                    continue;
                }
                bool one=0,two=0;
                tmp1.one=shit[k].one-1;
                tmp1.two=shit[k].two+1;
                tmp2.one=shit[k].one+1;
                tmp2.two=shit[k].two-1;

                if(mp.count(tmp1)&&mp.count(tmp2)){
                    ans+=2-flag;
                    flag=1;
                    continue;
                }
                one=one|mp.count(tmp1);
                tmp1.two--;
                one=one|mp.count(tmp1);

                two=two|mp.count(tmp2);
                tmp2.one--;
                two=two|mp.count(tmp2);
                if(one&&two){
                    ans+=2;continue;
                }
                puts("-1");
                return 0;
            }
        }
        i=j;
    }
    printf("%d\n",ans);
    return 0;
}

Submission Info

Submission Time
Task A - Distance Pairs
User munaiyi
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3226 Byte
Status WA
Exec Time 81 ms
Memory 7296 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:22:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
                   ^
./Main.cpp:25:48: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&shit[i].one,&shit[i].two);
                                                ^

Judge Result

Set Name sample All
Score / Max Score 0 / 0 0 / 1500
Status
AC × 2
AC × 18
WA × 17
Set Name Test Cases
sample sample-01.txt, sample-02.txt
All sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
01-01.txt AC 17 ms 1024 KB
01-02.txt AC 14 ms 1024 KB
01-03.txt AC 1 ms 256 KB
01-04.txt AC 1 ms 256 KB
01-05.txt WA 1 ms 256 KB
01-06.txt WA 14 ms 640 KB
01-07.txt WA 32 ms 1280 KB
01-08.txt WA 32 ms 1408 KB
01-09.txt WA 28 ms 1152 KB
01-10.txt WA 24 ms 1024 KB
01-11.txt WA 29 ms 1152 KB
01-12.txt WA 29 ms 1152 KB
01-13.txt WA 75 ms 7296 KB
01-14.txt WA 81 ms 7296 KB
01-15.txt AC 77 ms 7296 KB
01-16.txt WA 19 ms 1024 KB
01-17.txt WA 20 ms 1024 KB
01-18.txt AC 20 ms 1024 KB
01-19.txt WA 67 ms 7296 KB
01-20.txt WA 62 ms 6016 KB
01-21.txt WA 63 ms 6144 KB
01-22.txt WA 47 ms 3712 KB
01-23.txt AC 25 ms 1024 KB
01-24.txt AC 32 ms 1408 KB
01-25.txt AC 14 ms 1024 KB
01-26.txt AC 15 ms 1024 KB
01-27.txt AC 14 ms 1024 KB
01-28.txt AC 15 ms 1024 KB
01-29.txt AC 1 ms 256 KB
01-30.txt AC 1 ms 256 KB
01-31.txt WA 1 ms 256 KB
sample-01.txt AC 1 ms 256 KB
sample-02.txt AC 1 ms 256 KB