清北考前刷题da7下午好

三向城

/*
原图一定是一棵完全二叉树。
根节点是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=0,f=1;char c=getchar();
    while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;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=0;
        if(x==y){printf("1\n");continue;}
        while(x!=y)
        {
            if(x>y) x/=2,ans++;
            if(y>x) y/=2,ans++;
        }
        printf("%d\n",ans);
     }
     return 0;
}

灵魂画师

/*
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=0,f=1;char c=getchar();
    while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
    return x*f;
}

void DP()
{
    dp[0][1]=1;
    for(int i=0;i<tot;i++)
    {
        for(int j=0;j<c;j++)
        {
            dp[i+1][j]+=dp[i][j]/2;
            for(int x=0;x<c;x++) dp[i+1][(j*x)%c]+=dp[i][j]/(2*c);
        }
    }

    for(int i=1;i<=n;i++)
      for(int j=0;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=1;i<=k;i++)
    {
        l=read();r=read();
        for(int j=l;j<=r;j++)
            cnt[j]++,tot=max(tot,cnt[j]);
    }DP();
    return 0;
}

香子兰

时间: 2024-08-01 04:37:42

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

清北考前刷题day6下午好

/* 贪心 负数一定不取 枚举最高位是1 且答案取为0的 位置, 更新答案. */ #include<iostream> #include<cstdio> #include<cstring> #define ll long long #define N 100010 using namespace std; int n; ll a[N],ans,sum[N]; char s[N]; ll read() { ll x=0,f=1;char c=getchar(); whi

清北考前刷题day7早安

# 清北冬令营真题泛做

清北冬令营真题泛做 前言 这段时间为了准备冬令营把清北冬令营真题都做了一下.更个博回顾一下(免得你们老说我咕咕咕). 先写良心PKU的题再写THU的题, 主要是THU的题和PKU比起来真的毒瘤好多...... PKUWC2018 [PKUWC2018]Minimax 一个比较显然的暴力是归并排序,每次直接前后缀计算答案即可. 为啥不用线段树合并代替归并排序呢? 暴力线段树合并,合并的过程中顺便算一下即可,由于权值区间不交所以复杂度一个\(log\). [PKUWC2018]Slay the Sp

2017 清北济南考前刷题Day 3 morning

实际得分:100+0+0=100 T1 右上角是必败态,然后推下去 发现同行全是必胜态或全是必败态,不同行必胜必败交叉 列同行 所以n,m 只要有一个是偶数,先手必胜 #include<cstdio> using namespace std; int main() { freopen("star.in","r",stdin); freopen("star.out","w",stdout); int n,m; whi

2017 清北济南考前刷题Day 2 morning

期望得分:100+30+60=190 实际得分:100+30+30=160 T1 最优方案跳的高度一定是单调的 所以先按高度排序 dp[i][j] 跳了i次跳到j 枚举从哪儿跳到j转移即可 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 51 struct node { int c,h; }e[N]

2017 清北济南考前刷题Day 5 afternoon

期望得分:100+100+30=230 实际得分:0+0+0=30 T1 直接模拟 #include<cstdio> #include<iostream> using namespace std; void read(int &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } } #define N 1002

2017 清北济南考前刷题Day 1 morning

期望得分:100+100+50=250 实际得分:100+60+50=210 T2 二分 估错上界.估错复杂度 T1 立方数(cubic) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数. 现在给定一个数P,LYK想要知道这个数是不是立方数. 当然你有可能随机输出一些莫名其妙的东西来骗分,因此LYK有T次询问~ 输入格式(cub

2017 清北济南考前刷题Day 5 morning

期望得分:100+100+0=200 实际得分: 坐标的每一位不是0就是1,所以答案就是 C(n,k) #include<cstdio> #include<iostream> using namespace std; const int mod=1e9+7; void read(int &x) { x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0';

清北第一套题(zhx)

死亡 [问题描述] 现在有个位置可以打sif,有个人在排队等着打sif.现在告诉你前个人每个人需要多长的时间打sif,问你第个人什么时候才能打sif.(前个人必须按照顺序来) [输入格式] 第一行两个整数如上所述. 接下来行每行一个整数代表每个人所需要用的时间. [输出格式] 一行一个整数表示答案. [样例输入] 3 2 1 1 1 [样例输出] 1 [样例解释] 山里有座庙. [数据规模与约定] 对于的100%数据,每个人所需用的时间不超过10^5. 测试点     测试点     1 10