清北刷题冲刺 11-03 p.m
三向城


#include<iostream>
#include<cstdio>
using namespace std;
int n,x,y;
int main(){
freopen("city.in","r",stdin);freopen("city.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d",&n);
while(n--){
scanf("%d%d",&x,&y);
int ans=;
while(x!=y){
ans++;
if(x<y)swap(x,y);
x/=;
}
printf("%d\n",ans);
}
return ;
}
100分 两个同时往上跳
灵魂画师



#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,c,K,mc,cnt[];
double dp[][],ans;
int main(){
freopen("paint.in","r",stdin);freopen("paint.out","w",stdout);
scanf("%d%d%d",&n,&c,&K);
for(int i=;i<=K;i++){
int l,r;
scanf("%d%d",&l,&r);
for(int j=l;j<=r;j++){
cnt[j]++;
mc=max(cnt[j],mc);
}
}
dp[][]=;
for(int i=;i<mc;i++){
for(int j=;j<c;j++){
dp[i+][j]+=dp[i][j]/;
for(int k=;k<c;k++){
dp[i+][(j*k)%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);
return ;
}
100分 概率dp
香子兰



#include<iostream>
#include<cstdio>
#define maxn 21
using namespace std;
int map[][],n,m,sum,num,head[maxn],fa[maxn],mx,mn=0x7fffffff;
bool flag=;
struct node{
int to,pre,v;
}e[maxn*maxn*];
void Insert(int from,int to,int v){
e[++num].to=to;
e[num].v=v;
e[num].pre=head[from];
head[from]=num;
}
void dfs(int now,int father){
bool leaf=;
fa[now]=father;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
dfs(to,now);
leaf=;
}
if(now==n&&leaf==){
flag=;
return;
}
}
int main(){
freopen("vanilla.in","r",stdin);freopen("vanilla.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
int x,y,z;
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
mx=max(mx,z);mn=min(mn,z);
x+=;y+=;
map[x][y]=map[y][x]=z;
Insert(x,y,z);Insert(y,x,z);
sum+=z;
if(x!=i||y!=i+)flag=;
}
if(flag){
sum*=;
sum-=map[n][n-]*+map[][]*;
cout<<sum;
return ;
}
if(m==n-){
flag=;
dfs(,);
if(flag){
cout<<sum*-map[n][fa[n]]*;
}
else cout<<sum*;
return ;
}
while(sum<)sum*=;
sum%=;
if(sum<mx)sum+=mx*;
cout<<sum;
return ;
}
30分 乱搞骗分
#include<iostream>
#include<cstdio>
#define INF 1000000007
using namespace std;
int a[][],d[][],f[][][],e[];
int cnt[],n,n1,n2,x,y,z,m,q,ans,sta;
int main(){
freopen("vanilla7.in","r",stdin);
e[]=;
for(int i=;i<=;i++)e[i]=e[i-]<<;//预处理2^i
for(int i=;i<e[];i++){
int x=i;
while(x){
cnt[i]+=x&;
x>>=;
}
}
scanf("%d%d",&n,&m);
int x,y,z;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
if(i==j)continue;
d[i][j]=INF;
}
for(int i=;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
x++;y++;
if(z>=d[x][y])continue;
d[x][y]=d[y][x]=z;
}
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
if(n==){
printf("%d\n",(d[][]+d[][])*);
return ;
}
n1=(n-)/;
n2=n--n1;
for(int q=;q<=;q++){
for(int i=;i<=n;i++)
for(int j=;j<e[n-];j++)
f[q][i][j]=INF;
if(q==)
for(int i=;i<n;i++)f[q][i][e[i-]]=d[][i];
else
for(int i=;i<n;i++)f[q][i][e[i-]]=d[n][i];
for(int j=;j<e[n-];j++){
if(cnt[j]<n2)
for(int i=;i<n;i++){
if(f[q][i][j]<INF)
for(int 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;
for(int sta=;sta<e[n-];sta++){
if(cnt[sta]==n1){
x=INF;
for(int i=;i<n;i++){
if(sta&e[i-])
for(int 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];
}
}
}
for(int i=;i<n;i++){
if(sta&e[i-])
for(int 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 ;
}
100分 floyed+状压dp
预计得分100++
实际得分100++
T1很简单,T2是个简单的概率dp,但是数组开小了,T3一点思路都没有,就研究了一下链和树的情况,乱搞了一下
数组开小很不应该们,不能再犯
小结
清北刷题冲刺 11-03 p.m的更多相关文章
- 清北刷题冲刺 11-03 a.m
纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 2017-10-2 清北刷题冲刺班p.m
最大值 (max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...
- 清北刷题冲刺 11-02 a.m
卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- 清北刷题冲刺 11-01 p.m
轮换 #include<iostream> #include<cstdio> #include<cstring> #define maxn 1010 using n ...
- 清北刷题冲刺 10-31 a.m
集合 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; ], ...
- 清北刷题冲刺 10-30 a.m
星空 #include<iostream> #include<cstdio> using namespace std; int n,m; int main(){ freopen ...
- 清北刷题冲刺 10-29 p.m
洗澡 /* 这个题不能单纯判断左括号和右括号的多少,而应该从左到右扫一遍,看应该如何配对 */ #include<iostream> #include<cstdio> #inc ...
- 清北刷题冲刺 10-28 p.m
水题(贪心) (water) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK出了道水题. 这个水题是这样的:有两副牌,每副牌都有n张. 对于第一副牌的每 ...
- 清北刷题冲刺 10-28 a.m
立方数 (cubic) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方 ...
随机推荐
- 代码题(2)— 统计所有小于非负整数 n 的质数的数量
质数也叫素数,只能被1和它本身整除的. 利用筛选法. class Solution { public: int countPrimes(int n) { ) ; ; vector<); ;i&l ...
- java是用utf-16be编码方式编的。中文和英文都是两个字节
- sws_scale函数的用法-具体应用
移植ffmpeg过程中,遇到swscale的用法问题,所以查到这篇文章.文章虽然已经过去很长时间,但是还有颇多可以借鉴之处.谢谢“咕咕鐘". 转自:http://guguclock.blog ...
- TYVJ P1728 普通平衡树
P1728 普通平衡树 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 此为平衡树系列第一道:普通平衡树 描述 您需要写一种数据结构(可参考题目标题),来维护 ...
- 1014 Waiting in Line (30)(30 分)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...
- CH#24C 逃不掉的路 和 HDU3686 Traffic Real Time Query System
逃不掉的路 CH Round #24 - 三体杯 Round #1 题目描述 现代社会,路是必不可少的.任意两个城镇都有路相连,而且往往不止一条.但有些路连年被各种XXOO,走着很不爽.按理说条条大路 ...
- Oracle12c多租户如何启动关闭CDB或PDB (PDB自动启动)
Oracle 数据库 12 c 中介绍了多租户选项允许单个容器数据库 (CDB) 来承载多个单独的可插拔数据库 (PDB).下面我们一起来启动和关闭容器数据库 (CDB) 和可插拔数据库 (PDB). ...
- POJ1995:Raising Modulo Numbers
二进制前置技能:https://www.cnblogs.com/AKMer/p/9698694.html 题目传送门:http://poj.org/problem?id=1995 题目就是求\(\su ...
- asp.net中日志框架Log4Net的使用
Log4Net是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等),日志就是程序的黑匣子,可以通过日志查看系统的运行过程,从而发现系统的问题.日志的作用:将运 ...
- UML核心元素--分析类
分析类共有三个:边界类(boundary).控制类(control)和实体类(entity),这些分析类都是类的版型.分析类是跨越需求到设计实现的桥梁. 边界类:从需求向现实的转换过程中,任何两个有交 ...