2017.10.23测试
来源:互联网 发布:百度指数数据下载 编辑:程序博客网 时间:2024/05/15 01:14
分数:100+0+100=200 状态ojbk
题解
T1 fib
emmm果然走到了这一步…
出题人已经用暴力来应付题解了!
我还能说什么呢?
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>using namespace std;int read(){ int x=0,f=1;char c; for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-1; for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+c-'0'; return x*f;}int T,a;long long f[1005];void fb(){ #define m(a) memset(a,0,sizeof(a)) m(f); f[1]=1; for(int i=2;i<=45;i++){ f[i]=(long long)f[i-1]+f[i-2]; }}bool check(int x){ if(x==0)return 1; for(int i=1;f[i]<=x;i++){ for(int j=1;f[j]<=x;j++){ int tmp=(long long)f[i]*f[j]; if(x==tmp)return 1; } } return 0;}int main(){// freopen("fib.in","r",stdin);// freopen("fib.out","w",stdout); fb(); T=read(); while(T--){ a=read(); if(check(a)) cout<<"Yes"<<endl; else cout<<"No"<<endl; }}
… 实在不知道怎么错
T2 equal
感觉自己写的正解
但是毕竟是linux环境,变数略大,哎呦
就是lca、路径中点,然后一波特判balabala
可是自己又WA又T的,还是太可惜了,毕竟今天还是有五个AKdalao的
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>#define m(a) memset(a,0,sizeof(a))using namespace std;int read(){ int x=0,f=1;char c; for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-1; for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+c-'0'; return x*f;}int n,x,y,m;int tot=0;int nxt[200005],to[200005];int fst[100005],dis[100005],f[100005][30],sz[100005];void inser(int x,int y){ nxt[++tot]=fst[x]; fst[x]=tot; to[tot]=y;}void dfs(int x,int fa){ sz[x]=1; for(int u=fst[x];u;u=nxt[u]){ int v=to[u]; if(v==fa) continue; dis[v]=dis[x]+1; f[v][0]=x; dfs(v,x); sz[x]+=sz[v]; }}void build(){ dfs(1,0); for(int i=1;i<=26;i++){ for(int j=1;j<=n;j++){ if(f[j][i-1]) f[j][i]=f[f[j][i-1]][i-1]; } }}int lca(int x,int y){ if(dis[x]<dis[y]) swap(x,y); int len=dis[x]-dis[y]; for(int s=0;len;len>>=1,s++){ if(len&1) x=f[x][s]; } for(int i=26;i>=0;i--){ if(f[x][i]!=f[y][i]){ x=f[x][i];y=f[y][i]; } } if(x==y)return x; return f[x][0];}int jp(int x,int ff){ int len=dis[x]-ff; for(int s=0;len;len>>=1,s++){ if(len&1)x=f[x][s]; } return sz[x];}void solve(int x,int y){ int w=lca(x,y); if(dis[x]==dis[y]){ cout<<n-jp(x,dis[w]+1)-jp(y,dis[w]+1)<<endl; return; } if(w==x||w==y){ if(dis[x]<dis[y]) swap(x,y); int len=dis[x]-dis[y]; if(len&1){ cout<<0<<endl; return; } cout<<jp(x,(dis[x]+dis[y])/2)-jp(x,(dis[x]+dis[y])/2+1)<<endl; return; } int len=dis[x]+dis[y]-2*dis[w]; if(len&1){ cout<<0<<endl; return; } if(dis[x]<dis[y]) swap(x,y); cout<<jp(x,dis[x]-len/2)-jp(x,dis[x]-len/2+1)<<endl;}int main(){// freopen("equal.in","r",stdin);// freopen("equal.out","w",stdout); m(f);m(dis);m(sz); tot=0;n=read(); for(int i=1;i<n;i++){ x=read();y=read(); inser(x,y);inser(y,x); } build(); m=read(); for(int i=1;i<=m;i++){ x=read();y=read(); if(x==y) cout<<n<<endl; else solve(x,y); }}
天啊!!!居然是dis[x]==dis[y]的情况判错了!
这个时候应该是n-size[fx]-size[fy]而我写的居然是size[lca]-…!!!
调了一下午!!!该打
T3 tree
emmm,T3和T1可能是一个情况,但是没有那么简单
我采取从叶子节点开始倒着读,与父节点贪心匹配(就是能配上就配了)
而不是一开始写的:
- 按照边读
- 从父节点开始读
于是就A了?!
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<cmath>#define m(a) memset(a,0,sizeof(a))using namespace std;int read(){ int x=0,f=1;char c; for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-1; for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+c-'0'; return x*f;}int T,n,k,x,tot,ans,num;int fst[100005];bool vis[100005];struct node{ int x,to,nxt;}e[400005];void clear(){ m(e);m(vis);m(fst); tot=0;ans=0;num=0;}void inser(int x,int y){ e[++tot].nxt=fst[x]; fst[x]=tot; e[tot].x=x; e[tot].to=y;}void dfs(int x,int fa){ for(int u=fst[x];u;u=e[u].nxt){ int v=e[u].to; if(v==fa) continue; dfs(v,x); if(ans>=k)return; if(!vis[v]&&!vis[x]){ vis[v]=1; vis[x]=1; num++; ans+=2; if(ans>=k)return; } }}void fs(){ for(int i=1;i<=tot;i++){ if(vis[e[i].x]&&vis[e[i].to]) continue; vis[e[i].x]=1;vis[e[i].to]=1; ans++;num++; if(ans>=k)break; }}int main(){// freopen("tree.in","r",stdin);// freopen("tree.out","w",stdout); T=read(); while(T--){ clear(); n=read();k=read(); for(int i=1;i<n;i++){ x=read(); inser(i+1,x); inser(x,i+1); } dfs(1,0); if(ans<k)fs(); cout<<num<<endl; }}
阅读全文
0 0
- 2017.10.23测试
- 研究生课程 软件测试23: 估算测试工作量
- 2017.10.2 loli测试
- 2017.10.24测试
- 2017.10.20测试
- 2017.10.19测试
- 2017.10.26测试
- 2017.10.30测试
- 2017.10.31测试
- [BASIC-23] 芯片测试
- 2017.4.23loli测试
- 测试
- 测试
- 测试
- 测试
- 测试
- 测试
- 测试
- tcp连接的几个状态码
- uiautomator模拟长按物理按键
- 网页框架
- 【Linked-list专题-3】203. Remove Linked List Elements 19. Remove Nth Node From End of List
- jquery基础
- 2017.10.23测试
- C++ typedef typename 作用
- 关于可循线智能小车的制作(一)
- 2017.10.22作业
- PullToRefreshScrollView+Banner+banner.Listview
- C#中string和byte[]类型的转换
- OI一些奇怪的优化手段和常用技巧
- angular Js 添加查询球员信息
- 自定义view圆环