QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#56816#3873. TowersWilson_Lee0 813ms157820kbC++4.6kb2022-10-21 16:58:142022-10-21 16:58:17

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-10-21 16:58:17]
  • Judged
  • Verdict: 0
  • Time: 813ms
  • Memory: 157820kb
  • [2022-10-21 16:58:14]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;

typedef pair<int,int> pa;
const int MAXN=1e6+5;
struct node
{
    int x,y;
}p[MAXN];
vector<pa>X[MAXN],Y[MAXN];
int numx[MAXN],numy[MAXN],ans[MAXN];
int n,lenx,leny;
namespace debug{
    int vis[500][500];
    vector<node> cntx[MAXN], cnty[MAXN];
    int check(int ans[]){
        for(int i = 1; i <= n; i++){
            if(ans[i] == 1){
                cntx[p[i].x].push_back(p[i]);
                cnty[p[i].y].push_back(p[i]);
            }
        }
        for(int i = 1; i <= lenx; i++) if((int)cntx[i].size() > 2) return i;
        for(int i = 1; i <= leny; i++) if((int)cnty[i].size() > 2) return i;
        for(int i = 1; i <= n; i++){
            if(ans[i] == 1) continue;
            if(cnty[p[i].y].size() == 2){
                int x1 = cnty[p[i].y][0].x, x2 = cnty[p[i].y][1].x;
                if(x1 > x2) swap(x1, x2);
                if(x1 < p[i].x && x2 > p[i].x) continue;
            }
            if(cntx[p[i].x].size() == 2){
                int y1 = cntx[p[i].x][0].y, y2 = cntx[p[i].x][1].y;
                if(y1 > y2) swap(y1, y2);
                if(y1 < p[i].y && y2 > p[i].y) continue;
            }
            return -1;
        }
        return 0;
    }
    void main(int ans[]){
        printf("%d\n",check(ans));
    }
    void print(int ans[]){
        printf("--------------------------\n");
        for(int i = 1; i <= n; i++) printf("%d %d\n",p[i].x,p[i].y);
        printf("\n");
        for(int i = 1; i <= n; i++){
            if(ans[i] == 0) vis[p[i].x][p[i].y] = 1;
            else vis[p[i].x][p[i].y] = 2, printf("%d %d\n",p[i].x,p[i].y);
        }
        printf("\n");
        for(int i = 1; i <= lenx; i++){
            for(int j = 1; j <= leny; j++) printf("%d ",vis[i][j]);
            printf("\n");
        }
    }
}
int main()
{
    //freopen("tower4.in","r",stdin);
    //freopen("tower.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;++i) scanf("%d %d",&p[i].x,&p[i].y),numx[i]=p[i].x,numy[i]=p[i].y;
    sort(numx+1,numx+n+1),sort(numy+1,numy+n+1);
    lenx=unique(numx+1,numx+n+1)-numx-1,leny=unique(numy+1,numy+n+1)-numy-1;
    for(int i=1;i<=n;++i)
    {
        p[i].x=lower_bound(numx+1,numx+lenx+1,p[i].x)-numx;
        p[i].y=lower_bound(numy+1,numy+leny+1,p[i].y)-numy;
        //printf("%d %d\n",p[i].x,p[i].y);
    }
    //return 0;
    for(int i=1;i<=n;++i) X[p[i].x].push_back({p[i].y,i});
    for(int i=1;i<=lenx;++i)
    {
        sort(X[i].begin(),X[i].end());
        int si=X[i].size();
        Y[X[i][0].first].push_back({i,X[i][0].second});
        if(si>=2) Y[X[i][si-1].first].push_back({i,X[i][si-1].second});
    }
    for(int i=leny;i>=1;--i)
    {
        if(Y[i].size()<=2)
        {
            for(auto j:Y[i]) ans[j.second]=1;
            continue;
        }
        sort(Y[i].begin(),Y[i].end());
        int si=Y[i].size();
        ans[Y[i][0].second]=ans[Y[i][si-1].second]=1;
        vector<pa>tmp;
        tmp.push_back(Y[i][0]);
        if(si>=2) tmp.push_back(Y[i][si-1]);
        for(int j=1;j<si-1;++j)
        {
            ans[Y[i][j].second]=0;
            pa now={i,Y[i][j].second};
            int pos=lower_bound(X[Y[i][j].first].begin(),X[Y[i][j].first].end(),now)-X[Y[i][j].first].begin()-1;
            if(pos>0) Y[X[Y[i][j].first][pos].first].push_back({Y[i][j].first,X[Y[i][j].first][pos].second});
            else tmp.push_back(Y[i][j]);
        }
        Y[i]=tmp;
    }
    for(int i=1;i<=leny;++i)
    {
        if(Y[i].size()<=2)
        {
            for(auto j:Y[i]) ans[j.second]=1;
            continue;
        }
        sort(Y[i].begin(),Y[i].end());
        Y[i].erase(unique(Y[i].begin(),Y[i].end()),Y[i].end());
        int si=Y[i].size();
        ans[Y[i][0].second]=ans[Y[i][si-1].second]=1;
        /*if(i==4){
        cout<<"!!!"<<endl;
        for(auto [x,y]:Y[i]) printf("%d %d\n",x,y);
        return 0;
        }*/
        //vector<pa>tmp;
        //tmp.push_back(Y[i][0]),tmp.push_back(Y[i][si-1]);
        for(int j=1;j<si-1;++j)
        {
            ans[Y[i][j].second]=0;
            pa now={i,Y[i][j].second};
            int pos=upper_bound(X[Y[i][j].first].begin(),X[Y[i][j].first].end(),now)-X[Y[i][j].first].begin();
            if(pos<X[Y[i][j].first].size()-1) Y[X[Y[i][j].first][pos].first].push_back({Y[i][j].first,X[Y[i][j].first][pos].second});
            //else tmp.push_back(Y[i][j]);
        }
        //Y[i]=tmp;
    }
    //for(int i=1;i<=n;++i) if(ans[i]) putchar(i+'A'-1);
    //debug::main(ans);
    //for(int i=1;i<=n;++i) printf("%d",ans[i]);
    return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 8ms
memory: 97516kb

input:

2
869400 218695
664808 31410

output:


result:

wrong output format Unexpected end of file - token expected

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #26:

score: 0
Wrong Answer
time: 34ms
memory: 100496kb

input:

92690
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
1 51
1 52
1 53
1 54
1 55
1 56
1 57
1 58
1 59
1 60
1 6...

output:


result:

wrong output format Unexpected end of file - token expected

Subtask #4:

score: 0
Wrong Answer

Test #38:

score: 0
Wrong Answer
time: 740ms
memory: 153292kb

input:

1000000
1 18543
4 40327
7 19084
8 44274
10 42366
12 22173
13 9862
15 44706
19 48070
21 13389
24 39273
26 18680
27 46858
28 46126
32 27753
34 28289
36 12220
38 39235
42 28505
45 47348
46 34220
48 47551
50 49156
54 8856
55 25515
56 21932
58 24482
59 20686
61 41381
66 30112
67 44504
70 24510
71 26418
7...

output:


result:

wrong output format Unexpected end of file - token expected

Subtask #5:

score: 0
Skipped

Dependency #2:

0%

Subtask #6:

score: 0
Skipped

Dependency #5:

0%

Subtask #7:

score: 0
Wrong Answer

Test #85:

score: 0
Wrong Answer
time: 813ms
memory: 157820kb

input:

1000000
1 602300
1 778881
2 397065
3 291452
3 678039
5 235300
6 499367
8 8597
10 327718
10 516489
12 416542
12 440048
13 284169
13 383581
13 642202
13 770858
14 378154
14 710033
15 905531
16 50155
17 142259
19 395613
19 500321
20 358934
21 461772
24 562953
24 995887
25 421244
27 900412
29 301006
31 ...

output:


result:

wrong output format Unexpected end of file - token expected