社区讨论
初三老年选手做不来绿题
P14024 [ICPC 2024 Nanjing R] 纸条参与者 7已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mhj9w9a3
- 此快照首次捕获于
- 2025/11/03 23:06 4 个月前
- 此快照最后确认于
- 2025/11/03 23:06 4 个月前
rt. 我是一名可悲的普及组选手,我调不出来绿题。求大神帮助。
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void out(int x){
if(x==0){putchar('0');return;}
int len=0,k1=x,c[10005];
if(k1<0)k1=-k1,putchar('-');
while(k1)c[len++]=k1%10+'0',k1/=10;
while(len--)putchar(c[len]);
}
const int N=2e5+5;
int a[N],b[N];
signed main(){
// freopen("tmp.in","r",stdin);
// freopen("tmp.out","w",stdout);
int t=read();
while(t--){
vector<pair<int,int>>ans;bool f=1;
int n=read(),m=read(),k=read(),w=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=m;i++)b[i]=read();b[m+1]=w+1;
sort(a+1,a+n+1),sort(b+1,b+m+1);
for(int i=1;i<=n;i++){
// cout<<i<<" ";
if(!ans.empty())if(ans.back().second>=a[i])continue;
int p=upper_bound(b+1,b+m+2,a[i])-b;
// if(i==n){if(a[i]+k-1>w){f=0;puts("-1");break;}}
// if(p>m){ans.push_back({a[i],a[i]+k-1});continue;}
int l=a[i],r=a[i]+k-1;
// cout<<l<<" "<<r<<"\n";
if(r<b[p]){ans.push_back({l,r});continue;}
if(i==1){f=0;puts("-1");break;}
int pos=ans.size()-1,tmpl=b[p]-k,tmpr=b[p]-1;
ans.push_back({tmpl,tmpr});bool flag=1;
while(1){
// cout<<i<<": "<<pos<<" "<<ans[pos].first<<" "<<ans[pos].second<<" ";
// cout<<pos+1<<" "<<ans[pos+1].first<<" "<<ans[pos+1].second<<"\n";
if(ans[pos+1].first>ans[pos].second)break;
ans[pos]={ans[pos+1].first-k,ans[pos+1].second-1};
if(ans[pos].first<=b[p-1]){puts("-1");flag=0;break;}pos--;
if(pos<0){puts("-1");flag=0;break;}
}if(!flag){f=0;break;}
}if(f){cout<<ans.size()<<"\n";for(auto [l,r]:ans)cout<<l<<" ";puts("");}
}
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...