洛谷[LnOI2019]长脖子鹿省选模拟赛 简要题解

本文是洛谷长脖子鹿省选模拟赛的题解,涵盖T1快速多项式变换、T2加特林轮盘赌的概率计算、T3东京夏日相会的最小覆盖圆问题以及T4第二代图灵机的算法设计。针对每个题目,作者提供了思路解析和代码实现。
摘要由CSDN通过智能技术生成

传送门
听说比赛的时候 T 4 T4 T4标程锅了???
WTF换我时间我要写T3啊
于是在 T 4 T4 T4调半天无果的情况下 260 p t s 260pts 260pts收场真的是 t c l tcl tcl

T1 快速多项式变换(FPT)

题意:给两个整数表示 m , f ( m ) m,f(m) m,f(m),要求你构造一个 n n n次多项式 f ( x ) f(x) f(x), n n n自己定大小,要求所有系数非负,最高项系数不为 0 0 0


思路:
直接 m m m进制分解就完了。
代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int RLEN=1<<18|1;
inline char gc(){
   
    static char buf[RLEN],*ib,*ob;
    (ib==ob)&&(ob=(ib=buf)+fread(buf,1,RLEN,stdin));
    return ib==ob?-1:*ib++;
}
inline int read(){
   
    int ans=0;
    char ch=gc();
    while(!isdigit(ch))ch=gc();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=gc();
    return ans;
}
typedef long long ll;
ll m,fm,mult;
int main(){
   
    cin>>m>>fm;
    vector<ll>ans;
    ll tim=0;
    mult=1;
    while(fm/mult>=m)++tim,mult*=m;
    while(1){
   
        ans.push_back(fm/mult);
        fm%=mult;
        if(mult==1)break;
        mult/=m;
    }
    cout<<ans.size()<<'\n';
    for(ri i=ans.size()-1;~i;--i)cout<<ans[i]<<' ';
    return 0;
}

T2 加特林轮盘赌

题意: n n n个人坐在一个圆桌上,轮流把加特林对着自己的头,扣动扳机一秒钟。中枪的自动退出,坚持到最后的就是胜利者,每个人在每回合中枪的概率是完全相同的 P 0 P_0 P0,给出 P 0 P_0 P0 n n n,询问 k k k号长脖子鹿最终成为唯一幸存者的概率 P k P_k Pk


思路:
定义状态 f i , j f_{i,j} fi,j表示 i i i个人玩,算上当前这个人距离第 k k k个人还有 j j j回合成为赢家的概率。
我们可以推出几个显然的式子:
f i , 1 = ( 1 − P 0 ) ∗ f i , n f_{i,1}=(1-P_0)*f_{i,n} fi,1=(1P0)fi,n
f i , 2 = P 0 f i − 1 , 1 + ( 1 − P 0 ) f i , 1 f_{i,2}=P_0f_{i-1,1}+(1-P_0)f_{i,1} fi,2=P0fi1,1+(1P0)fi,1
f i , 3 = P 0 f i − 1 , 2 + ( 1 − P 0 ) f i ,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值