#include<bits/stdc++.h>usingnamespacestd;#define int long long
signedmain(){cin.tie(nullptr)->sync_with_stdio(false);intn,k;cin>>n>>k;vector<int>c(k);for(auto&x:c)cin>>x;intp=*min_element(c.begin(),c.end());structTeam{intidx;intw;strings;booloperator<(constTeam&o)const{returnw>o.w;}};vector<Team>vec(n);unordered_map<string,int>ump;for(inti=0;auto&[idx,w,s]:vec){idx=i++;cin>>w>>s;if(notump.contains(s))ump[s]=0;}sort(vec.begin(),vec.end());vector<int>ans(n);intcur=0;for(auto[idx,w,s]:vec){if(ump[s]<p){cur++;ump[s]++;}ans[idx]=cur;}for(inti=0;i<n;i++){cout<<ans[i]<<"\n";}return0;}
Alice 和 Bob 在玩游戏,对于每一句游戏,Alice 有 $p_0$ 的概率获胜,Bob 有 $p_1$ 的概率获胜,剩下的 $1-p_0-p_1$ 的概率是平局,平局什么都不会发生。若赢家的筹码数量大于等于输家的筹码数量,则赢家获胜,游戏结束;否则输家失去与赢家当前筹码数量相等的筹码,游戏继续。问 Alice 最终获胜的概率。
这里之所以能这么操作,是因为我们这里的操作本质上就是计算 Alice 需要赢的次数以及 Bob 需要输的次数,然后我们不难发现后者其实就是 $1$ 减去 Bob 赢的次数(这里的 Bob 是要能满足 Alice 赢的约束的 ,$a^{\lfloor y/x \rfloor}$ 的意思就是 Alice 赢了 $\lfloor y/x \rfloor$ 次的概率,因为只有 $\lfloor y/x \rfloor=0$ 我们才能以 Alice 赢的姿态结束游戏,在这种姿态下,Bob 被输的只剩 $y\bmod x$ 个筹码了,这里我们就可以交换二者来简略计算)。因此我们搞一个类似于辗转相除的递归解决即可。
#include<bits/stdc++.h>usingnamespacestd;#define int long long
constexprintMOD=998244353;intfpow(inta,intb){intres=1;while(b){if(b&1)(res*=a)%=MOD;(a*=a)%=MOD;b>>=1;}returnres%MOD;}intinv(intx){returnfpow(x,MOD-2);}voidsolve(){intx,y;cin>>x>>y;inta0,a1,b;cin>>a0>>a1>>b;b=inv(a0+a1);a0=b*a0%MOD,a1=b*a1%MOD;cout<<[](thisautoself,intx,inty,inta,intb)->int{if(x==0)return0;returnfpow(a,y/x)*((1-self(y%x,x,b,a)+MOD)%MOD)%MOD;}(x,y,a0,a1)<<"\n";}signedmain(){cin.tie(nullptr)->sync_with_stdio(false);intT=1;cin>>T;while(T--)solve();return0;}
#include<bits/stdc++.h>usingnamespacestd;#define int long long
voidsolve(){intn;cin>>n;if(n%4==0){cout<<"NO\n";return;}cout<<"YES\n";array<int,32>a;a.fill(1);intx=(1ll<<32)-1-n;for(inti=1;i<32;i++){if(((x>>i)&1))a[i-1]=-1;}if(n%2==0)a[0]=0;for(inti=0;i<4;i++){for(intj=0;j<8;j++){cout<<a[8*i+j]<<" \n"[j==7];}}}signedmain(){cin.tie(nullptr)->sync_with_stdio(false);intT;cin>>T;while(T--)solve();return0;}
#include<bits/stdc++.h>usingnamespacestd;#define int long long
structGood{intw;intv;intc;booloperator<(constGood&o)const{returnc*o.w<w*o.c;}};voidsolve(){intn;cin>>n;vector<Good>goods(n);for(auto&[w,v,c]:goods){cin>>w>>v>>c;}sort(goods.begin(),goods.end());intsum=0;intans=0;for(auto&[w,v,c]:goods){ans+=v-c*sum;sum+=w;}cout<<ans<<"\n";}signedmain(){cin.tie(nullptr)->sync_with_stdio(false);intT=1;while(T--)solve();return0;}
#include<bits/stdc++.h>usingnamespacestd;#define int long long
structFrac{inta,b;Frac(int_a,int_b){int_g=gcd(_a,_b);a=_a/_g,b=_b/_g;}Fracoperator+(constFrac&o)const{int_b=lcm(b,o.b);int_a=_b/b*a+_b/o.b*o.a;return{_a,_b};}booloperator<(constFrac&o)const{returna*o.b<o.a*b;}};voidsolve(){intn;cin>>n;Fracans(1e9,1);intv=sqrt(2*n);for(inti=0;i<=1;i++){if(v+i>0){intx=v+i;Fract=Frac(x+1,2)+Frac(n,x)+Frac(-1,1);if(t<ans)ans=t;}}cout<<ans.a<<" "<<ans.b<<"\n";}signedmain(){cin.tie(nullptr)->sync_with_stdio(false);intT=1;cin>>T;while(T--)solve();return0;}