set和map都不怎么会用的逗比就这样完挂了第一次cf
div2 D
#include <cstdio> #include <cstring> #include <set> #include <iostream> #include <algorithm> #include <cstdlib> using namespace std; set<int> a,b,c; int aa[400001],bb[400001]; int n,kd[200001]; int l; int x,y; int main() { cin>>n>>l>>x>>y; for (int i=1;i<=n;i++) { cin>>kd[i]; a.insert(kd[i]); } sort(kd+1,kd+n+1); int f1=0,f2=0; for (int i=1;i<=n;i++) { if (a.find(kd[i]+x)!=a.end()||a.find(kd[i]-x)!=a.end()) f1=1; if (a.find(kd[i]+y)!=a.end()||a.find(kd[i]-y)!=a.end()) f2=1; if (f1==1&&f2==1) { printf("0"); return 0; } } int js=0; for (int i=1;i<=n;i++) { if (kd[i]-x>=0) { aa[++js]=kd[i]-x; b.insert(kd[i]-x); } if (kd[i]+x<=l) { aa[++js]=kd[i]+x; b.insert(kd[i]+x); } } js=0; for (int i=1;i<=n;i++) { if (kd[i]-y>=0) { bb[++js]=kd[i]-y; c.insert(kd[i]-y); } if (kd[i]+y<=l) { bb[++js]=kd[i]+y; c.insert(kd[i]+y); } } if (f1==1) { printf("1 %d",bb[1]); return 0; } if (f2==1) { printf("1 %d",aa[1]); return 0; } for (int i=1;i<=js;i++) { if (b.find(bb[i])!=b.end()) { printf("1 %d",bb[i]); return 0; } } printf("2 %d %d",aa[1],bb[1]); }
代码很丑