清北刷题冲刺 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次方,则这个数就是立方 ...
随机推荐
- GitHub基本使用
什么是GitHub? GitHub是用于版本控制和协作的代码托管平台.它可以让您和其他人在任何地方一起工作 本教程教你如GitHub必需资源,如仓库,分支,提交和拉请求.您将创建自己的Hello Wo ...
- phpcon china 2017听讲总结
1. <PHP in 2017>--Rasmus Lerdorf 2. <车轮的服务化service架构>--韩天峰 3. <企点微服务网关演进之路>--郑榕 4. ...
- codeforces 459D D. Pashmak and Parmida's problem(离散化+线段树或树状数组求逆序对)
题目链接: D. Pashmak and Parmida's problem time limit per test 3 seconds memory limit per test 256 megab ...
- SQL语言方方面面
1 数据库和SQL 1.1 数据库 DB, DBMS DBMS的种类: 层次性数据库, 关系型数据库, 非关系型数据库 RDBMS, 关系数据库管理系统 1.2 数据库的结构 RDBMS常见的系统结构 ...
- 【二叉树的递归】03判断二叉树中有没有和为给定值的路径【Path Sum】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树和一个和,判断这个树 ...
- bzoj 3611: [Heoi2014]大工程 虚树
题目: 国家有一个大工程,要给一个非常大的交通网络里建一些新的通道. 我们这个国家位置非常特殊,可以看成是一个单位边权的树,城市位于顶点上. 在 2 个国家 a,b 之间建一条新通道需要的代价为树上 ...
- redhat 安装lamp
安装Apache yum install httpd 安装MySql yum install mysql mysql-server 安装php yum install php 安装php的mysql模 ...
- C#SqlDataReader的用法
string sqljn = "select [序号],[品名],[电压等级],[单位],[型号],[规格],[红本价格] FROM [book].[dbo].[View_wjprice]& ...
- 七 内置锁 wait notify notifyall; 显示锁 ReentrantLock
Object中对内置锁进行操作的一些方法: Java内置锁通过synchronized关键字使用,使用其修饰方法或者代码块,就能保证方法或者代码块以同步方式执行. 内置锁使用起来非常方便,不需要显式的 ...
- lvs-nat搭建httpd
拓扑图: #172.16.252.10 [root@~ localhost]#route -n Kernel IP routing table Destination Gateway Genmask ...