三向城

/*
原图一定是一棵完全二叉树。
根节点是x,左节点是x*2,右节点是x*2+1
转化为二进制往左右走就很明显了。
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define ll long long using namespace std;
int T,x,y,k,ans,pos; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int main()
{
freopen("city.in","r",stdin);
freopen("city.out","w",stdout);
T=read();
while(T--)
{
x=read();y=read();ans=;
if(x==y){printf("1\n");continue;}
while(x!=y)
{
if(x>y) x/=,ans++;
if(y>x) y/=,ans++;
}
printf("%d\n",ans);
}
return ;
}

灵魂画师

/*
dp[i][j][k]表示第i个元素经过j次染色变为k颜色的概率。
考虑一段区间,每个元素只有选和不选两个状态,所以概率都为1/2.
转移的时候枚举下一个染不染和染成什么颜色。染成下一种颜色的概率是1/c。
可以看出第一维是没有用的,因为被覆盖次数相同的格子概率是相同的。
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 107 using namespace std;
int n,m,tot,c,k,t,l,r,cnt[N];
double dp[N][N],ans; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void DP()
{
dp[][]=;
for(int i=;i<tot;i++)
{
for(int j=;j<c;j++)
{
dp[i+][j]+=dp[i][j]/;
for(int x=;x<c;x++) dp[i+][(j*x)%c]+=dp[i][j]/(*c);
}
} for(int i=;i<=n;i++)
for(int j=;j<c;j++)
ans+=dp[cnt[i]][j]*j;
printf("%.3lf\n",ans);
} int main()
{
freopen("paint.in","r",stdin);
freopen("paint.out","w",stdout);
n=read();c=read();k=read();
for(int i=;i<=k;i++)
{
l=read();r=read();
for(int j=l;j<=r;j++)
cnt[j]++,tot=max(tot,cnt[j]);
}DP();
return ;
}

香子兰

#include <cstdio>
#define inf 1000000007
#define N 24
int a[N][N],d[N][N],f[][N][],e[N],cnt[];
int n,n1,n2,x,y,z,i,j,m,k,q,ans,sta; int main()
{
freopen("vanilla.in", "r", stdin);
freopen("vanilla.out", "w", stdout);
e[] = ;
//预处理2^i
for (i=; i<=; ++i)
e[i] = e[i-]<<;
//预处理每个二进制数中有几个1
for (i=; i<e[]; ++i)
for (x=i; x!=; x>>=)
cnt[i] += x&; scanf("%d%d", &n, &m);
for (i=; i<=n; ++i)
for (j=; j<=n; ++j)
d[i][j] = inf*(i!=j);
for (i=; i<=m; ++i)
{
scanf("%d%d%d", &x, &y, &z);
++x;++y;
if (z<d[x][y])
d[x][y] = d[y][x] = z;
} // floyd求两两最短路
for (k=; k<=n; ++k)
for (i=; i<=n; ++i)
for (j=; j<=n; ++j)
if (d[i][k]+d[k][j] < d[i][j])
d[i][j] = d[i][k]+d[k][j]; if (n == )
{
printf("%d\n", (d[][]+d[][])*);
return ;
} n1 = (n-)/;
n2 = n--n1;
//求从家、花店开始,走到点i,经过的点为j的最短路
//q=0:从家开始,q=1:从花店开始
for (q=; q<=; ++q)
{
//初始化状态
for (i=; i<=n; ++i)
for (j=; j<e[n-]; ++j)
f[q][i][j] = inf;
if (q == )
{
for (i=; i<n; ++i)
f[q][i][e[i-]] = d[][i];
}
else
{
for (i=; i<n; ++i)
f[q][i][e[i-]] = d[n][i];
} //dp
for (j=; j<e[n-]; ++j)
if (cnt[j] < n2)
for (i=; i<n; ++i)
if (f[q][i][j] < inf)
for (k=; k<n; ++k)
if (f[q][i][j]+d[i][k] < f[q][k][j|e[k-]])
f[q][k][j|e[k-]] = f[q][i][j]+d[i][k];
} ans = inf;
//枚举先走到的一半为sta
for (sta=; sta<e[n-]; ++sta)
if (cnt[sta] == n1)
{
//前半段
x = inf; //x记录前半段的最短距离
//枚举前一半中最后一个收割的点是i
for (i=; i<n; ++i)
if (sta&e[i-])
//枚举后一半中第一个收割的点是j
for (j=; j<n; ++j)
if (!(sta&e[j-]))
if (f[][i][sta]+d[i][j]+f[][j][e[n-]--sta] < x)
x = f[][i][sta]+d[i][j]+f[][j][e[n-]--sta]; //后半段
//枚举前一半中最后一个播种的点是i
for (i=; i<n; ++i)
if (sta&e[i-])
//枚举后一半中第一个播种的点是j
for (j=; j<n; ++j)
if (!(sta&e[j-]))
if (x+f[][i][sta]+d[i][j]+f[][j][e[n-]--sta] < ans)
ans = x+f[][i][sta]+d[i][j]+f[][j][e[n-]--sta];
}
printf("%d\n", ans);
return ;
}

清北考前刷题da7下午好的更多相关文章

  1. 清北考前刷题day1下午好

    水题(water) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每张牌长和宽 ...

  2. 清北考前刷题day3下午好

    /* 可以并查集维护 可以发现,某个联通快出现大于等于2个环,一定无法分配. 有解要么一个环,要么没有环. 一个环时答案等于点数乘2(顺时针或逆时针). 没有环是树,对于一个n个点的树,方案一定有n种 ...

  3. 清北考前刷题day6下午好

    /* 贪心 负数一定不取 枚举最高位是1 且答案取为0的 位置, 更新答案. */ #include<iostream> #include<cstdio> #include&l ...

  4. 清北考前刷题da5下午好

    /* (4,1)*(3,1)*(2,1)的话1变成2然后一直是2 2变成1然后变成3 3变成1然后变成4 4变成1 */ #include<iostream> #include<cs ...

  5. 清北考前刷题day4下午好

    /* 辗转相除,每次计算多出现了几个数. */ #include<iostream> #include<cstdio> #include<cstring> #inc ...

  6. 清北考前刷题day2下午好

    #include<iostream> #include<cstdio> #include<cstring> #include<stack> #defin ...

  7. 清北考前刷题day4早安

      LI /* 没有考虑次大值有大于一个的情况 */ #include<iostream> #include<cstdio> #include<cstring> # ...

  8. 清北考前刷题day7早安

  9. 清北考前刷题day6早安

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...

随机推荐

  1. 【转】Comet:基于 HTTP 长连接的“服务器推”技术

    原文链接:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/ 很多应用譬如监控.即时通信.即时报价系统都需要将后台发生的变化实时传送到客户端而无 ...

  2. 【转】WEB前端调优

    首先从一次完整的的请求说起:(以此为例get,www,baidu.com) 1,webbrower 发出request, 2,然后解析www.baidu.com为ip,找到ip的服务器, 3,服务器处 ...

  3. 看板娘 & 二次元 & live2d

    live2d https://l2dwidget.js.org/dev.html https://github.com/xiazeyu/live2d-widget.js 看板娘 要切换看板娘吗? ht ...

  4. POJ1094 字母排序(拓扑排序)

    该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列.是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出: 2.该序列不能判断是否有序: 3.该序列字母次 ...

  5. Django:(7)auth用户认证组件 & 中间件

    用户认证组件 用户认证组件: 功能:用session记录登陆验证状态 前提:用户表:django自带的auth_user 创建超级用户的命令: python manage.py createsuper ...

  6. 在workbench中导入.sql文件!(导入数据库文件)

    第一步,登陆mysql workbench 第二步,打开自己的数据 ,此处默认(root) 打开数据库后页面 : 第三步,新建一个schema ,随便给个名字,这里起名为test : 可以看到test ...

  7. poj_2524_Ubiquitous Religions_201407211506

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23390   Accepted:  ...

  8. HDU 5641 King's Phone【模拟】

    题意: 给定一串密码, 判断是否合法. 长度不小于4 不能重复经过任何点 不能跳过中间点,除非中间点已经经过一次. 分析: 3*3直接记录出可能出现在两点之间的点,直接模拟就好. 注意审题,别漏了判断 ...

  9. css3自定义流动条

    <style> .item { height: 180px; overflow: auto; width: 180px; float: left; margin: 11px; box-sh ...

  10. WCF - 自定义绑定

    自定义绑定 当系统提供的某个绑定不符合服务的要求时,可使用 CustomBinding 类.所有绑定都是从绑定元素的有序集构造而来的.自定义绑定可以从一组系统提供的绑定元素生成,也可以包含用户定义的自 ...