军训去了没有打,回来看题跑。
T1:hehe
注意X可能是实数233
#include<cstdio> #include<cctype> #include<queue> #include<stack> #include<cstring> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define ren for(int i=first[x];i;i=next[i]) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } const int maxn=55; int A[maxn],t[maxn]; int main() { int n=read(),ans=0; char s[15]; rep(i,1,n) { scanf("%s",s);scanf("%s",s); A[i]=read()<<1; if(s[0]=='<'&&s[1]=='=') t[i]=1; else if(s[0]=='<') t[i]=2; else if(s[0]=='=') t[i]=3; else if(s[0]=='>'&&s[1]=='=') t[i]=4; else t[i]=5; } rep(x,-1,2001) { int res=0; rep(i,1,n) { if(t[i]==1&&x<=A[i]) res++; if(t[i]==2&&x<A[i]) res++; if(t[i]==3&&x==A[i]) res++; if(t[i]==4&&x>=A[i]) res++; if(t[i]==5&&x>A[i]) res++; } ans=max(ans,res); } printf("%d ",ans); return 0; }
T2:其实是让你求出Max(depx+fy+1|y不是x的祖先),其中depx表示x的深度,fy表示y到子树中最深的节点的距离。
#include<cstdio> #include<cctype> #include<queue> #include<stack> #include<cstring> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define ren for(int i=first[x];i;i=Next[i]) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } const int maxn=100010; int n,ans,first[maxn],to[maxn],Next[maxn],e,f[maxn],mx=-1<<30; void AddEdge(int v,int u) {to[++e]=v;Next[e]=first[u];first[u]=e;} void solve(int x,int dep) { ren solve(to[i],dep+1),f[x]=max(f[x],f[to[i]]+1); ans=max(ans,dep+mx+1);mx=max(mx,f[x]); } int main() { int n=read(); rep(i,2,n) AddEdge(read(),read()); solve(1,0);printf("%d ",ans); return 0; }
T3:我不做计算几何
T4:妈妈啊