传送门
听说比赛的时候 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=(1−P0)∗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=P0fi−1,1+(1−P0)fi,1
f i , 3 = P 0 f i − 1 , 2 + ( 1 − P 0 ) f i ,