QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#784723#692. Delete the Pointsydzr00000RE 0ms0kbC++172.3kb2024-11-26 15:48:102024-11-26 15:48:18

Judging History

This is the latest submission verdict.

  • [2024-11-26 15:48:18]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-11-26 15:48:10]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
struct Point{
    int x,y;
    friend inline bool operator<(const Point &P,const Point &Q)
    {
        return P.x==Q.x?P.y<Q.y:P.x<Q.x;
    }
}a[3001];
inline void solve()
{
    int n;
    scanf("%d",&n);
    set<Point>st;
    for(int i=1;i<=n;i++)
    {
        scanf("%d %d",&a[i].x,&a[i].y);
        st.insert(a[i]);
    }
    puts("Yes");
    for(int i=1;i<=n/2;i++)
    {
        auto it=st.end();
        it--;auto P=*it;
        it--;auto Q=*it;
        if(P.x==Q.x)
        {
            int len=P.y-Q.y;
            printf("%d %d %d %d\n",P.x,Q.y,P.x+len,P.y);
            st.erase(P);st.erase(Q);
        }
        else if(Q.y<=P.y)
        {
            int len=max(P.x-Q.x,P.y-Q.y);
            printf("%d %d %d %d\n",Q.x,Q.y,Q.x+len,Q.y+len);
            st.erase(P);st.erase(Q);
        }
        else if((int)st.size()==2)
        {
            int len=max(P.x-Q.x,Q.y-P.y);
            printf("%d %d %d %d\n",P.x,P.y,P.x-len,P.y+len);
            st.erase(P);st.erase(Q);
        }
        else
        {
            it--;auto R=*it;
            if(R.x==Q.x&&R.y>P.y)
            {
                int len=Q.y-R.y;
                printf("%d %d %d %d\n",R.x,R.y,R.x+len,R.y+len);
                st.erase(Q);st.erase(R);
            }
            else if(R.x==Q.x&&R.y==P.y)
            {
                int dx=P.x-R.x,dy=Q.y-P.y;
                if(dx<dy)
                {
                    printf("%d %d %d %d\n",R.x,R.y,R.x+dx,R.y+dx);
                    st.erase(R);st.erase(P);
                }
                else if(dx>dy)
                {
                    printf("%d %d %d %d\n",R.x,R.y,R.x+dy,R.y+dy);
                    st.erase(R);st.erase(Q);
                }
                else
                {
                    printf("%d %.1lf %d %.1lf\n",R.x,R.y-0.5,R.x+dx,R.y+dx-0.5);
                    st.erase(R);st.erase(P);
                }
            }
            else
            {
                int len=max(P.x-Q.x,Q.y-P.y);
                printf("%d %d %d %d\n",Q.x,P.y,Q.x+len,P.y+len);
                st.erase(P);st.erase(Q);
            }
        }
    }
    assert(st.empty());
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--)
        solve();
    
    return 0;
}

详细

Test #1:

score: 0
Runtime Error

input:

4
1 1
2 2
5 5
6 6

output:


result: