比赛链接 :点击这里
大概会写 F G J L 吧
F
给你一个序列 最多删除一个数使他构成 最长不上升或者不下降子序列
这题不会不会on的算法只能 t*n*logn 了 还是压常过
求两次 LIS
#include<bits/stdc++.h> using namespace std; #define maxn 300005 #define ll int int a[maxn],b[maxn],c[maxn]; int n; inline ll read() { ll x=,f=;char ch=getchar(); '){ ;ch=getchar(); } '){ x=x*+ch-';ch=getchar(); }return x*f; } int bin(int l,int r,int x){ while(l<=r){ ; if(b[mid]>=x){ r=mid-; }; } return l; } int work(){ memset(b,,sizeof(b)); ; ;j<n;j++){ ]){ b[len++]=a[j]; }else{ ,len,a[j]+); b[i]=a[j]; } // for(int j=1;j<=len;j++){ // cout<<b[j]<<" "; // } //cout<<endl; } ; } int main(){ int t; cin>>t; while(t--){ n=read(); ,mx=; ;j<n;j++){ a[j]=read(); } int len=work(); reverse(a,a+n); int len1=work(); )||len1>=n-){ printf("YES\n"); }else printf("NO\n"); } ; }
G 只有4个点才能组成一个正四边形
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<stack> #include<math.h> #include<vector> #include<map> #include<set> #include<stdlib.h> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define exp 1e-10 using namespace std; ; ; ; ; ]; int main() { int t,i,j,n,k; scanf("%d",&t); while(t--) { scanf("%d",&n); ;i<n;i++) scanf("%d%d",&x[i],&y[i]); ) { puts("NO"); continue; } ;i<n;i++) ;j<i;j++,k++) L[k]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); sort(L,L+); ]==L[]&&L[]==L[]&&L[]==L[]&&L[]==L[]&&L[]!=L[]) puts("YES"); else puts("NO"); } ; }
J
字典树
#include<bits/stdc++.h> using namespace std; #define maxn 1000100 #define LL long long LL a[maxn]; struct ac{ LL x,nex[]; void init(){ x=; memset(nex,,sizeof(nex)); } }tre[maxn]; LL tot,n; void init(){ memset(tre,,sizeof(tre)); tot=; } void add(LL x){ LL k=; tre[k].x++; ;j>=;j--){ <<j))&x); ){ tre[k].nex[fa]=++tot; tre[tot].init(); } k=tre[k].nex[fa]; tre[k].x++; } } void del(LL x){ LL k=; tre[k].x--; ;j>=;j--){ <<j))&x); k=tre[k].nex[fa]; tre[k].x--; } } LL query(LL x){ LL k=,ans=; ;j>=;j--){ <<j))&x); ]&&tre[tre[k].nex[fa^]].x>){ ans+=1LL*(<<j); k=tre[k].nex[fa^]; }else k=tre[k].nex[fa]; } return ans; } int main(){ LL t; cin>>t; while(t--){ cin>>n; init(); ;j<n;j++){ scanf("%d",&a[j]); add(a[j]); } LL mx=; ;j<n;j++){ ;k<n;k++){ del(a[j]); del(a[k]); mx=max(mx,query(a[j]+a[k])); add(a[j]); add(a[k]); } } cout<<mx<<endl; } }
L
Select Code #include<bits/stdc++.h> using namespace std; #define maxn 100 int a[maxn][maxn]; int main(){ int t; cin>>t; while(t--){ ,ans=; cin>>n>>m; ;j<=n;j++){ ;k<=m;k++){ cin>>a[j][k]; mx=max(mx,a[j][k]); if(a[j][k]){ ans+=a[j][k]*+; } } } ;j<=n;j++){ ;k<=m;k++){ ][k],a[j][k]); ],a[j][k]); ans-=z*; ans-=zz*; } } cout<<ans<<endl; } ; }