A
Fake NP
standard input/output
s, MB Submit Add to favourites x3673
B
-palindrome
standard input/output
s, MB Submit Add to favourites x3760
C
Find Amir
standard input/output
s, MB Submit Add to favourites x3503
D
Minimum number of steps
standard input/output
s, MB Submit Add to favourites x2242
E
Ice cream coloring
standard input/output
s, MB Submit Add to favourites x142
F
Expected diameter of a tree
standard input/output
s, MB Submit Add to favourites x28

考的时候写出来了前4道...    ORZ yzy Rank7

A题

考的时候SB 了   r-l<=100的时候搞了个暴力判了判..

应该是这样的..

//By SiriusRen
#include <map>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
map<int,int>mp,remp;
int l,r;
int main(){
scanf("%d%d",&l,&r);
if(l==r){
printf("%d\n",l);
}
else{
puts("2");
}
}

  

B  构造   aabbaabb...

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a[200050];
int main(){
scanf("%d",&n);
a[1]=0,a[2]=1;
for(int i=3;i<=n;i++){
if(a[i-2]==0)a[i]=1;
else a[i]=0;
}
for(int i=1;i<=n;i++)printf("%c",a[i]+'a');
}

C  贪心 1->n->2->n-1.....

判一下奇偶

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int main(){
scanf("%d",&n);
printf("%d\n",n/2-1+(n%2));
}

  

D  乱搞

//By SiriusRen
#include <cstdio>
#include <cstring>
using namespace std;
const int N=1000050,p=1000000007;
char s[N];
int n,ans,res;
int main(){
scanf("%s",s+1),n=strlen(s+1);
for(int i=n;i;i--)
if(s[i]=='b')res=(res+1)%p;
else (ans+=res)%=p,(res+=res)%=p;
printf("%d\n",ans);
}

  

E  max(s[i]) 贪心染色  别问我为什么

//By SiriusRen
#include<bits/stdc++.h>
#define N 300005
using namespace std;
vector<int> G[N],E[N];
int n,m,ans,col[N],cnt,vis[N];
void dfs(int t,int fa){
int i,cnt=1;
for(i=0;i<E[t].size();i++)
if(col[E[t][i]]) vis[col[E[t][i]]]=t;
for(i=0;i<E[t].size();i++)
if(!col[E[t][i]]){
while(vis[cnt]==t) cnt++;
vis[cnt]=t,col[E[t][i]]=cnt;
}
for(i=0;i<G[t].size();i++)
if(G[t][i]!=fa)dfs(G[t][i],t);
}
int main()
{
int i,x,y;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&x),ans=max(ans,x);
while(x--)scanf("%d",&y),E[i].push_back(y);
}
for(i=1;i<n;i++)scanf("%d%d",&x,&y),G[x].push_back(y),G[y].push_back(x);
dfs(1,0);
printf("%d\n",max(ans,1));
for(i=1;i<=m;i++)printf("%d ",max(col[i],1));
return 0;
}

  

F

保存每个点能走的最远距离 (可以O(1)求)

搞个前缀和之类的东西维护一下

每回 O(小块)的复杂度  再开个set记录一下答案 就(卡)过去了..

//By SiriusRen
#include <set>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=200050;
vector<int>vec[N],dis[N],sum[N];
struct Node{int x,y;double ans;}JY;
bool operator<(Node a,Node b){if(a.x!=b.x)return a.x<b.x;return a.y<b.y;}
set<Node>s;set<Node>::iterator it;
int n,m,q,first[N],nxt[N],v[N],w[N],tot,root,xx,yy,vis[N];
int maxx[N][2],rec[N][2],f[N],Root[N],vv[N],fi,flag,size[N];
void add(int x,int y){w[tot]=1,v[tot]=y,nxt[tot]=first[x],first[x]=tot++;}
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
void get_dia(int x,int fa){
rec[x][0]=rec[x][1]=x;
for(int i=first[x];~i;i=nxt[i])if(v[i]!=fa){
get_dia(v[i],x);
if(maxx[v[i]][0]+w[i]>maxx[x][0])
maxx[x][1]=maxx[x][0],rec[x][1]=rec[x][0],
maxx[x][0]=maxx[v[i]][0]+w[i],rec[x][0]=rec[v[i]][0];
else if(maxx[v[i]][0]+w[i]>maxx[x][1])
maxx[x][1]=maxx[v[i]][0]+w[i],rec[x][1]=rec[v[i]][0];
}if(maxx[x][0]+maxx[x][1]>maxx[root][0]+maxx[root][1])root=x;
}
void DFS(int x,int fa,int deep){
vv[x]=max(vv[x],deep);
if(flag)vec[fi].push_back(vv[x]),size[fi]++;
for(int i=first[x];~i;i=nxt[i])if(v[i]!=fa){
DFS(v[i],x,deep+w[i]);
}
}
int main(){
memset(first,-1,sizeof(first));
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=m;i++)
scanf("%d%d",&xx,&yy),add(xx,yy),add(yy,xx),f[find(xx)]=find(yy);
for(int i=1;i<=n;i++){
fi=find(i);
if(!rec[fi][0]){
root=flag=0,get_dia(i,0),Root[fi]=root;
DFS(rec[root][0],0,0),flag=1,DFS(rec[root][1],0,0);
}
}
for(int i=1;i<=n;i++){
fi=find(i);
if(!vis[fi]){
vis[fi]=1;
dis[fi].resize(size[fi]+1),sum[fi].resize(size[fi]+1);
for(int j=0;j<vec[fi].size();j++)
dis[fi][vec[fi][j]]++,sum[fi][vec[fi][j]]+=vec[fi][j];
for(int j=size[fi]-1;j>=0;j--)
dis[fi][j]+=dis[fi][j+1],sum[fi][j]+=sum[fi][j+1];
}
}
while(q--){
scanf("%d%d",&xx,&yy);
int fx=find(xx),fy=find(yy);
if(fx==fy){puts("-1");continue;}
if(vec[fx].size()>vec[fy].size())swap(xx,yy),swap(fx,fy);
JY.x=fx,JY.y=fy;
if((it=s.find(JY))!=s.end()){printf("%.10lf\n",it->ans);continue;}
int dis1=maxx[Root[fx]][0]+maxx[Root[fx]][1];
int dis2=maxx[Root[fy]][0]+maxx[Root[fy]][1];
int Dis=max(dis1,dis2);
long long ans=0;
for(int i=0;i<vec[fx].size();i++){
ans+=sum[fy][Dis-vec[fx][i]]+1ll*dis[fy][Dis-vec[fx][i]]*(vec[fx][i]+1);
ans+=1ll*Dis*(size[fy]-dis[fy][Dis-vec[fx][i]]);
}
JY.ans=(double)ans/size[fx]/size[fy],s.insert(JY);
printf("%.10lf\n",(double)ans/size[fx]/size[fy]);
}
// for(int i=1;i<=n;i++)printf("%d ",vv[i]);
}

  

Codeforces Round 411 Div.2 题解的更多相关文章

  1. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  2. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  3. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  4. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  5. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  6. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  7. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  8. Codeforces Round #160 (Div. 1) 题解【ABCD】

    Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...

  9. Codeforces Round #383 (Div. 2) 题解【ABCDE】

    Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...

随机推荐

  1. linux time-统计给定命令所花费的总时间

    推荐:更多linux 性能监测与优化 关注:linux命令大全 time命令用于统计给定命令所花费的总时间. 语法 time(参数) 参数 指令:指定需要运行的额指令及其参数. 实例 当测试一个程序或 ...

  2. rsync+sersync自动同步备份数据

    一.为什么要用Rsync+sersync架构?1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修 ...

  3. [bzoj2242][SDOI2011][计算器] (Baby-Step-Giant-Step+快速幂+exgcd)

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  4. ISO7220M芯片调试总结

    3.3V或者5V供电        速度可以达到150Mbps      有25年的寿命 调试问题总结: 在调试中发现,芯片焊接的时候很容易损坏,甚至350度焊接,时间在5s的时间都会坏掉.当坏掉的时 ...

  5. ViewService

    ViewService 在分布式系统中,最常见的场景就是主备架构.但是如果主机不幸宕机,如何正确的通知客户端当前后端服务器的状况成为一个值得研究的问题.本文描述了一种简单的模型用于解决此问题. 背景 ...

  6. macos-mojave

    macos-mojave https://itunes.apple.com/cn/app/macos-mojave/id1398502828?mt=12

  7. 轰炸II

    题目背景 本题为轰炸数据加强版 题目描述 一个城市遭到了M次轰炸,每次都炸了一个每条边都与边界平行的矩形 在轰炸后,有N个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几 ...

  8. solr合并集合

    当需要合并两个不同项目或者是多个分开配置的服务器时,你既可以使用lucene-misc里面的IndexMergeTool工具,也可以使用CoreAdminHandler. 要合并索引,必须满足如下要求 ...

  9. 登陆模块,这个是很重要的模块,有shiro和spring security专门的权限认证框架

    登陆模块,这个是很重要的模块,有shiro和spring security专门的权限认证框架

  10. DELPHI新版本WEBSERVICE的变化

    DELPHI新版本WEBSERVICE,不仅可以编译成ISAPI DLL,依靠IIS部署, 并且还可以编译成单独的EXE,不再依赖IIS就可以独立运行,这一点未尝不可以说是非常方便的改进.