2017-11-4离线赛总结
来源:互联网 发布:吴江js华腾公寓自提柜 编辑:程序博客网 时间:2024/06/05 19:32
- 题目
- 失分小结
- 估分
- 实际分数
- 题解
- T1
- P65
- CODE
- P100
- CODE
- P65
- T2
- P100
- CODE
- P100
- T3
- P80
- CODE
- P100
- CODE
- P80
- T1
题目
3802,3803,3804.
失分小结
估分
100+20+80=200
实际分数
65+0+0=65
小C:你是打酱油的么
我:我本来可以拿200的!
小C:骗谁啊
三题都炸,最烂的一次…
第一题内存开小…
第二题…本来也就只写了P20然后还编译错误…
第三题依旧编译错误…我恨重载!!少加了个const
…以及ans没开long long
题解
T1
P65
真的只是无聊给你们看看内存开小的后果
CODE
#include<cstdio>#include<algorithm>#define N 100005int n,m;int Q[N],Q2[N],l1=1,l2=1,r1,r2;inline int top() { int t1=-2e9,t2=-2e9; if(l1<=r1)t1=Q[l1]; if(l2<=r2)t2=Q2[l2]; if(t1>=t2) { l1++; return t1; } l2++; return t2;}bool cmp(int _,int __) {return _>__;}int main() { int i; scanf("%d%d",&n,&m); for(i=1; i<=n; i++)scanf("%d",&Q[i]); std::sort(Q+1,Q+1+n,cmp); r1=n; i=0; while(++i) { int x=top(); if(x<i) { --i; break; } if(x==i)break; Q2[++r2]=x-m+1; } printf("%d",i); return 0;}
P100
CODE
#include<cstdio>#include<algorithm>#define N 500005int n,m;int Q[N],Q2[N],l1=1,l2=1,r1,r2;inline int top() { int t1=-2e9,t2=-2e9; if(l1<=r1)t1=Q[l1]; if(l2<=r2)t2=Q2[l2]; if(t1>=t2) { l1++; return t1; } l2++; return t2;}bool cmp(int _,int __) {return _>__;}int main() { int i; scanf("%d%d",&n,&m); for(i=1; i<=n; i++)scanf("%d",&Q[i]); std::sort(Q+1,Q+1+n,cmp); r1=n; i=0; while(++i) { int x=top(); if(x<i) { --i; break; } if(x==i)break; Q2[++r2]=x-m+1; } printf("%d",i); return 0;}
T2
状压dp.
P100
CODE
#include<cstdio>#include<cmath>#include<memory.h>#define M 20#define reg register/*不要在意这些细节*/typedef long long LL;inline void rd(int &x) { x=0;char c; while(c=getchar(),c<48); do x=(x<<3)+(x<<1)+(c&15); while(c=getchar(),c>47);}int cnt[M],A[100005];LL cost[1<<M][M];LL dp[1<<M],val[M][M];inline void Min(LL &a,LL b) {if(a>b)a=b;}int main() { int n,k; rd(n),rd(k); for(reg int i=1; i<=n; i++)rd(A[i]),A[i]--; for(reg int i=n; i>=1; i--) { for(reg int j=0; j<k; j++) if(j!=A[i]) val[A[i]][j]+=cnt[j]; cnt[A[i]]++; } for(reg int i=0; i<k; i++) for(reg int j=1; j<(1<<k); j++) if(!(j&(1<<i))) { reg int x=j&-j; cost[j][i]=cost[j-x][i]+val[i][(int)log2(x)]; } memset(dp,127,sizeof dp); dp[0]=0; for(reg int i=0; i<(1<<k); i++) for(reg int j=0; j<k; j++) if(!(i&(1<<j))) Min(dp[i|(1<<j)],dp[i]+cost[i][j]); printf("%lld\n",dp[(1<<k)-1]); return 0;}
T3
P80
CODE
#include<cstdio>#include<memory.h>#include<algorithm>#define N 100005using namespace std;struct node2 {int to,nxt;}edge[N<<1];int head[N],tot;int dep[N],fa[N],sz[N],son[N],top[N];struct node { int a,b,lca; bool operator<(const node _)const/*就是这个const!!!*/ {return dep[lca]>dep[_.lca];}} A[N];void dfs1(int x) { sz[x]=1; for(int i=head[x]; ~i; i=edge[i].nxt) { node2 y=edge[i]; if(y.to==fa[x])continue; fa[y.to]=x; dep[y.to]=dep[x]+1; dfs1(y.to); sz[x]+=sz[y.to]; if(sz[son[x]]<sz[y.to]) son[x]=y.to; }}void dfs2(int x,int tp) { top[x]=tp; if(son[x])dfs2(son[x],tp); for(int i=head[x]; ~i; i=edge[i].nxt) { int y=edge[i].to; if(y==fa[x]||y==son[x])continue; dfs2(y,y); }}int LCA(int a,int b) { while(top[a]!=top[b]) { if(dep[top[a]]>dep[top[b]])a=fa[top[a]]; else b=fa[top[b]]; } return dep[a]>dep[b]?b:a;}int du[N];bool cmp(node a,node b) {return a.a<b.a;}int main() { int n,m,a,b; scanf("%d %d",&n,&m); memset(head,-1,sizeof head); bool flag=1; for(int i=1; i<n; i++) { scanf("%d %d",&a,&b); edge[tot]=(node2) {b,head[a]},head[a]=tot++; edge[tot]=(node2) {a,head[b]},head[b]=tot++; du[a]++; du[b]++; if(a!=b+1&&b!=a+1)flag=0; } dfs1(1); dfs2(1,1); for(int i=1; i<=m; i++) { scanf("%d %d",&A[i].a,&A[i].b); A[i].lca=LCA(A[i].a,A[i].b); if(A[i].a>A[i].b) { int t=A[i].a; A[i].a=A[i].b; A[i].b=t; } } long long ans=0; if(!flag) {//非链 sort(A+1,A+m+1); for(int i=1; i<=m; i++) { for(int j=i+1; j<=m; j++) { int lcai=A[i].lca,lcaj=A[j].lca; if(lcai!=lcaj&&lcai!=A[j].a&&lcai!=A[j].b) { if(dep[lcai]==dep[lcaj])continue; int cnt=0; bool f=0; if(dep[lcai]<=dep[A[j].a])cnt++; if(dep[lcai]<=dep[A[j].b])f=1,cnt++; if(cnt==0)continue; else if(cnt==1) { if(f&&LCA(lcai,A[j].b)==lcai)ans++; else if(LCA(lcai,A[j].a)==lcai)ans++; } else { cnt=0; if(LCA(lcai,A[j].a)!=lcai)cnt++; if(LCA(lcai,A[j].b)!=lcai)cnt++; if(cnt==1)ans++; } } else ans++; } } } else {//链 sort(A+1,A+m+1,cmp); for(int i=1; i<m; i++) { int x=A[i].b,pos=i; int L=i+1,R=m; while(L<=R) { int mid=(L+R)>>1; if(A[mid].a<=x) { L=mid+1; pos=mid; } else R=mid-1; } ans+=pos-i; } } printf("%lld\n",ans); return 0;}
P100
CODE
#include<cstdio>#include<memory.h>#define N 100005using namespace std;inline void rd(int &x){ x=0;char c; while(c=getchar(),c<48); do x=(x<<1)+(x<<3)+(c&15); while(c=getchar(),c>47);}struct node2 {int to,nxt;}edge[N<<1];int head[N],tot;int dep[N],fa[N],sz[N],son[N],top[N];void dfs1(int x) { sz[x]=1; for(register int i=head[x]; ~i; i=edge[i].nxt) { node2 y=edge[i]; if(y.to==fa[x])continue; fa[y.to]=x; dep[y.to]=dep[x]+1; dfs1(y.to); sz[x]+=sz[y.to]; if(sz[son[x]]<sz[y.to]) son[x]=y.to; }}void dfs2(int x,int tp) { top[x]=tp; if(son[x])dfs2(son[x],tp); for(register int i=head[x]; ~i; i=edge[i].nxt) { register int y=edge[i].to; if(y==fa[x]||y==son[x])continue; dfs2(y,y); }}int LCA(int a,int b) { while(top[a]!=top[b]) { if(dep[top[a]]>dep[top[b]])a=fa[top[a]]; else b=fa[top[b]]; } return dep[a]>dep[b]?b:a;}int sum[N],cnt[N];long long ans=0;void DFS(int x) { for(register int i=head[x]; ~i; i=edge[i].nxt) { register int y=edge[i].to; if(y==fa[x])continue; DFS(y); sum[x]+=sum[y]; } ans+=1LL*cnt[x]*sum[x]+1LL*cnt[x]*(cnt[x]-1)/2;}int main() { int n,m,a,b,lca; rd(n),rd(m); memset(head,-1,sizeof head); for(register int i=1; i<n; i++) { rd(a),rd(b); edge[tot]=(node2) {b,head[a]},head[a]=tot++; edge[tot]=(node2) {a,head[b]},head[b]=tot++; } dfs1(1); dfs2(1,1); for(register int i=1; i<=m; i++) { rd(a),rd(b); lca=LCA(a,b); sum[a]++;sum[b]++;sum[lca]-=2;cnt[lca]++; } DFS(1); printf("%lld\n",ans); return 0;}
阅读全文
1 0
- 2017-11-4离线赛总结
- 2017-11-3离线赛总结
- 2017-11-3离线赛总结
- 2017-11-5离线赛总结
- 2017-11-6离线赛总结
- 2017-11-7离线赛总结
- 2017-11-8离线赛总结
- 2017-11-9离线赛总结
- 2017-10-4离线赛总结
- 2017.10.11离线赛总结
- 2017.10.4离线赛总结
- 2017-11-8离线赛总结 (NOIP七连测第六场)
- 2017-11-4离线赛总结(NOIP七连测第二场)
- 2017/7/29 离线赛 总结
- 2017-9-24离线赛总结
- 2017-9-25离线赛总结
- 2017-9-26离线赛总结
- 2017-9-28离线赛总结
- 阻塞模式下socket连接connect超时后长达75秒,如何避免
- SSM实现简单的CRUD技术分析
- 静态工厂模式&工厂模式&抽象工厂模式&解决的问题
- mybatis 中 foreach collection的三种用法
- uva141
- 2017-11-4离线赛总结
- Dalvik指令解析示例
- Tomcat7.0.42源码研读之组件生命周期Lifecycle(一)
- 动态规划之最长公共子序列
- C
- 51Nod
- 你真的了解过度绘制吗?
- 使用gdb调试的一般步骤
- 修改centos6&rhel6.5支持auto resize the root partition