Codeforces Round #411 (Div. 2)
来源:互联网 发布:php csdn博客 编辑:程序博客网 时间:2024/06/06 04:00
拿游子小号和大家打了一场codeforces,感觉自己被肝爆了qwqqq,wxl求轻虐...qwq
A
貌似是让求区间[l,r]中出现次数最多的约数...那就是2呗...当然l==r时是l
//codeforces 805A#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;int n,l,r;int main(){ int i,j; scanf("%d%d",&l,&r); if(l==r) printf("%d\n",l); else printf("2\n"); return 0;}
B
构造一个ab序列,不能出现长度为3的回文
那就aabbaabb无限循环...
//codeforces 805B#include<cstdio>#include<cstring>//codeforces 805D#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int mod=1e9+7;const int mxn=1000005;ll n,num,cnt,res,ans;ll pw[mxn];char s[mxn];int main(){ int i,j; scanf("%s",s+1); n=strlen(s+1); pw[0]=1; fo(i,1,n) pw[i]=(pw[i-1]*2)%mod; fo(i,1,n) { if(s[i]=='a') cnt++; else if(s[i]=='b' && (s[i+1]=='a' || i==n)) { res++; ans=(ans+res*(pw[cnt]-1)%mod)%mod; res=0; } else res++; } printf("%lld\n",ans); return 0;}
C
贪心的来吧...1->n->2->n-1->3->n-2...
大力观察得出这样是最优解→_→
//codeforces 805C#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;int n;int main(){ int i,j; scanf("%d",&n); if(n&1) printf("%d\n",n/2); else printf("%d\n",n/2-1); return 0;}
D
给一个ab序列,如果出现ab就变成bba,问变几次就不需要再变了...
大力观察么...
//codeforces 805D#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int mod=1e9+7;const int mxn=1000005;ll n,num,cnt,res,ans;ll pw[mxn];char s[mxn];int main(){ int i,j; scanf("%s",s+1); n=strlen(s+1); pw[0]=1; fo(i,1,n) pw[i]=(pw[i-1]*2)%mod; fo(i,1,n) { if(s[i]=='a') cnt++; else if(s[i]=='b' && (s[i+1]=='a' || i==n)) { res++; ans=(ans+res*(pw[cnt]-1)%mod)%mod; res=0; } else res++; } printf("%lld\n",ans); return 0;}
E
这个题...观察到联通块的性质,所以暴力dfs+贪心染色就好啦
//codeforces 805E. Ice cream coloring#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int mxn=300005;bool bo[mxn],wxl[mxn];int n,m,cnt,tot,ans=1;vector <int> e[mxn];int head[mxn],color[mxn];struct node {int to,next;} f[mxn<<1];inline void add(int u,int v){ f[++cnt].to=v,f[cnt].next=head[u],head[u]=cnt;}inline void dfs(int u,int fa){ int tmp=1,v; for(int i=0;i<e[u].size();i++) { v=e[u][i]; bo[color[v]]=1; } for(int i=0;i<e[u].size();i++) { v=e[u][i]; while(bo[tmp]) tmp++; if(!color[v]) color[v]=tmp++; } for(int i=0;i<e[u].size();i++) { v=e[u][i]; bo[color[v]]=0; } for(int i=head[u];i;i=f[i].next) { v=f[i].to; if(v==fa) continue; dfs(v,u); }}int main(){ int i,j,x,u,v; scanf("%d%d",&n,&m); fo(i,1,n) { scanf("%d",&x); while(x--) { scanf("%d",&v); e[i].push_back(v); } } fo(i,2,n) { scanf("%d%d",&u,&v); add(u,v),add(v,u); } dfs(1,0); fo(i,1,m) ans=max(ans,color[i]); printf("%d\n",ans); fo(i,1,m) printf("%d ",max(color[i],1)); printf("\n"); return 0;}
F
调了一上午嗯嗯嗯
这题超讨厌...树的题完全不会...真的好难啊qwqqq
做出来还是不会证明复杂度qwqqq
总的来说:map大法好,vector把你保
//codeforces 805F#include<map>#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<algorithm>#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;const int mxn=100005;double x,ans;vector <int> e[mxn],res[mxn];map < pair<int,int>,double > mp;bool vis[mxn],dia[mxn];int n,m,q,fff,cnt,tot,mx;int head[mxn],p[mxn][3],len[mxn],last[mxn];int father[mxn],pre[mxn],dist[mxn],size[mxn];struct node {int to,next,from;} f[mxn<<1];inline void add(int u,int v){ f[++cnt].to=v,f[cnt].next=head[u],head[u]=cnt;}inline int find(int x){ if(x==father[x]) return father[x]; return father[x]=find(father[x]);}inline void dfs1(int u,int lenth){ vis[u]=1,size[fff]++; if(lenth>=mx) mx=lenth,p[fff][1]=u; for(int i=head[u];i;i=f[i].next) { int v=f[i].to; if(!vis[v]) dfs1(v,lenth+1); }}inline void dfs2(int u,int lenth){ vis[u]=1; if(lenth>=len[fff]) p[fff][2]=u; len[fff]=max(len[fff],lenth); for(int i=head[u];i;i=f[i].next) { int v=f[i].to; if(!vis[v]) dfs2(v,lenth+1); }}inline void dfs3(int u) //标记最长链{ vis[u]=1; if(u==p[fff][2]) { dia[u]=1,dist[u]=len[fff]; int num=0; while(pre[u]) num++,u=pre[u],dia[u]=1,dist[u]=max(num,len[fff]-num); return; } for(int i=head[u];i;i=f[i].next) { int v=f[i].to; if(v==pre[u]) continue; pre[v]=u; dfs3(v); }}inline void dfs4(int u,int lenth){ vis[u]=1,dist[u]=lenth; e[fff].push_back(lenth); for(int i=head[u];i;i=f[i].next) { int v=f[i].to; if(dia[v] || vis[v]) continue; dfs4(v,lenth+1); }}inline double solve(int t1,int t2){ int i,j,l,r; ll sum=0,tmp=max(len[t1],len[t2]); for(l=0;l<(int)e[t1].size();l++) { r=upper_bound(e[t2].begin(),e[t2].end(),tmp-e[t1][l]-1)-e[t2].begin(); sum+=r*tmp+res[t2][size[t2]-1]+(size[t2]-r)*(e[t1][l]+1); if(r) sum-=res[t2][r-1]; } return (double)sum/((double)size[t1]*size[t2]);}int main(){ int i,j,u,v,t1,t2,z; scanf("%d%d%d",&n,&m,&q); fo(i,1,n) father[i]=i; fo(i,1,m) { scanf("%d%d",&u,&v); add(u,v),add(v,u); int t1=find(u),t2=find(v); if(t1!=t2) father[t1]=t2; } fo(i,1,n) if(!vis[i]) fff=find(i),mx=0,dfs1(i,0); memset(vis,0,sizeof vis); fo(i,1,n) if(!vis[i]) fff=find(i),dfs2(p[fff][1],0); memset(vis,0,sizeof vis); fo(i,1,n) if(!vis[i]) fff=find(i),dfs3(p[fff][1]); memset(vis,0,sizeof vis); fo(i,1,n) if(!vis[i] && dia[i]) fff=find(i),dfs4(i,dist[i]); fo(fff,1,n) if(father[fff]==fff) { sort(e[fff].begin(),e[fff].end()); res[fff].push_back(e[fff][0]); for(j=1;j<e[fff].size();j++) res[fff].push_back(res[fff][j-1]+e[fff][j]); } while(q--) { scanf("%d%d",&u,&v); int t1=find(u),t2=find(v); if(size[t2]<size[t1]) swap(t1,t2); if(t1==t2) { printf("-1\n"); continue; } if(mp.count(make_pair(t1,t2))) { printf("%.10lf\n",mp[make_pair(t1,t2)]); continue; } ans=mp[make_pair(t1,t2)]=solve(t1,t2); printf("%.10lf\n",ans); } return 0;}/*5 2 12 44 32 5*/
1 0
- Codeforces Round #411 (Div. 2)
- Codeforces Round #411 (Div. 2)
- codeforces Round#411 Div.2
- Codeforces Round #411 (Div. 2)
- Codeforces Round #411 (Div. 2)总结
- Codeforces Round #411 (Div.2) ABCD
- Codeforces Round #411 (Div. 2) 题解
- Codeforces Round #411 (Div. 2) 题解
- Codeforces Round #411 (Div. 2) E
- Codeforces Round #102 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #104 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #107 (Div. 2)
- Codeforces Round #108 (Div. 2)
- Codeforces Round #110 (Div. 2)
- Java学习笔记22 jdk5.0新特性
- Java学习笔记23 反射机制(reflect…
- GridView添加统计(合计)行
- Java学习笔记24 静态代理模式和动…
- Java学习笔记25 java注解(annotat…
- Codeforces Round #411 (Div. 2)
- Java学习笔记26 异常Exception
- Java学习笔记27 将数字转换为中文…
- Java学习笔记28 观察者模式(awt中…
- Java学习笔记29 内部类(Inner Cla…
- 不要在外人面前揭孩子的“短”…
- 2-1体系结构技术发展
- android动画(三)属性动画
- 程序员要拥抱变化,聊聊Android即将支持的Java 8