20分求hack
查看原帖
20分求hack
1351249
pswing楼主2025/8/29 17:30
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> PIR;
const int N=1000010,mod=1e9+7,M=-2000000000000000000;
int a[N],b[N];
vector<PIR> A[N],B[N];
void slove()
{
    int n,m;
    cin>>n>>m;
    int flo=0;
    for(int i=1;i<=n;i++)
        B[i].clear(),A[i].clear(),b[i]=0;
    for(int i=1;i<=m;i++)
    {
        int x,y,k,p;
        cin>>x>>y>>k>>p;
        int sum=n*(n+1)/2-(n+(n-x)*(x-1));
        if(k==n*(n+1)/2)
        {
            //cout<<y<<'\n';
            int l=max(0ll,y-p),r=y+p;
            B[x].push_back({l,r});
        }
        else if(k==sum)
        {
            int l=y-p-1,r=y+p+1;
            A[x].push_back({l,r});
        }
        else
        {
            //cout<<n*(n+1)/2<<'\n';
            flo=1;
        }
    }
    if(flo)
    {
        cout<<-1<<'\n';
        return ;
    }
    for(int i=1;i<=n;i++)
    {
        int l=-1,r=1e18;
        for(auto x:B[i])
            l=max(l,x.first),r=min(r,x.second);
        int u1=1e18,u2=0;
        for(auto x:A[i])
            u1=min(u1,x.first),u2=max(u2,x.second);
        if(B[i].size()==0&&A[i].size()==0)
          continue;
        if(B[i].size()==0)
        {
            //cout<<u1<<'\n';
            if(u1<0&&u2>2000000000)
            {
                cout<<-1<<'\n';
                return ;
            }
            if(u1>=0)
             b[i]=u1;
            else if(u2<=2000000000)
              b[i]=u2;
            continue;
        }
        if(A[i].size()==0)
        {
            if(r<l)
            {
                cout<<-1<<'\n';
                return ;
            }
            b[i]=l;
            continue;
        }
         //cout<<u1<<" "<<u2<<'\n';
        if((l>u1&&r<u2)||r<l)
        {
            cout<<-1<<'\n';
            return ;
        }
       
        if(l<=u1)
          b[i]=l;
        else if(r>=u2)
          b[i]=r;
    }
    for(int i=1;i<=n;i++)
       cout<<b[i]<<" ";
    cout<<'\n';
}
signed main()
{
  std::ios::sync_with_stdio(false);
  cin.tie(0); 
  cout.tie(0);
  int t=1;
  cin>>t;
  while(t--)
    slove();
}
2025/8/29 17:30
加载中...