QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#56820#3873. TowersWilson_Lee0 24ms97472kbC++4.7kb2022-10-21 17:01:452022-10-21 17:01:48

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 17:01:48]
  • Judged
  • Verdict: 0
  • Time: 24ms
  • Memory: 97472kb
  • [2022-10-21 17:01:45]
  • 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");
        }
    }
}
void rush1()
{
    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());
        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;
        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;
    }
}
void rush2(bool flag)
{
    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;
        vector<pa>tmp;
        if(flag) 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 if(flag) tmp.push_back(Y[i][j]);
        }
        if(flag) Y[i]=tmp;
    }
}
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;
    }
    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});
    }
    rush1(),rush2(1);
    rush1(),rush2(1);
    rush1(),rush2(1);
    rush1(),rush2(1);
    rush1(),rush2(1);
    rush1(),rush2(0);
    //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: 12ms
memory: 97472kb

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: 24ms
memory: 97380kb

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: 19ms
memory: 97284kb

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: 12ms
memory: 97284kb

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