1. 程式人生 > >[AtCoder Grand Contest 019] F: Yes or No (agc019F)

[AtCoder Grand Contest 019] F: Yes or No (agc019F)

Description

有N+M個問題,N個問題的答案是Yes,M個問題的答案是No

現在將這N+M個問題隨機排列
你需要按順序回答,每回答一個問題就會告訴你這道題的正確答案

求最優策略下答對問題的期望數量
答案對998244353取模
n,m<=5e5

Solution

顯然,最優策略一定是哪一個多選哪個

假設當前有x個問題是Yes,y個問題是No

不妨用點(x,y)表示

那麼原問題就轉換到網格圖上

這裡寫圖片描述

如圖,N=5,M=4
橫座標看做N,縱座標看做M

一種題目的排列就對應了從右上角到左下角的一條路徑

紅線就是y=x的直線
紅線下方表示y

<x,此時我們回答Yes,紅線上方表示y>x,此時回答No

那麼只要經過一次藍色的邊都代表答對一次

可以發現無論路徑怎麼走,經過的藍邊都是max(n,m)次

此時只剩下當y=x時我們怎麼選
當y=x時我們會亂選一個,1/2機會對

那麼統計y=x上每個點經過它的路徑數,乘上1/2

再除以總路徑數,加上max(n,m)就是答案

Code

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm> #define mo 998244353 #define LL long long #define N 1000005 #define fo(i,a,b) for(int i=a;i<=b;i++) #define fod(i,a,b) for(int i=a;i>=b;i--) using namespace std; LL js[N],ny[N]; LL ksm(LL k,LL n) { LL s=1; for(;n;k=k*k%mo,n>>=1) if(n&1) s=s*k%mo; return
s; } LL C(LL n,LL m) { return js[n]*ny[m]%mo*ny[n-m]%mo; } int main() { int n,m; cin>>n>>m; if(n<m) swap(n,m); js[0]=1; fo(i,1,n*2) js[i]=js[i-1]*(LL)i%mo; ny[2*n]=ksm(js[2*n],mo-2); fod(i,2*n-1,0) ny[i]=ny[i+1]*(LL)(i+1)%mo; LL ans=0; fo(i,1,m) { ans=(ans+C(n+m-i-i,n-i)*C(i+i,i)%mo)%mo; } ans=ans*ny[2]%mo*ksm(C(n+m,m),mo-2)%mo; printf("%lld\n",(ans+n)%mo); }

相關推薦

[AtCoder Grand Contest 019] F: Yes or No (agc019F)

Description 有N+M個問題,N個問題的答案是Yes,M個問題的答案是No 現在將這N+M個問題隨機排列 你需要按順序回答,每回答一個問題就會告訴你這道題的正確答案 求最優策略下答對問題的期望數量 答案對998244353取模 n,

AtCoder Grand Contest 019 F-yes or no

include main out cout ogr program template 需要 contest AtCoder Grand Contest 019 F-yes or no 解題思路: 考慮一個貪心策略,假設當前還有 \(x\) 道 \(\text{yes}\)

AtCoder Grand Contest 006 F - Blackout

sin 所在 long long || 如果 open int 雙向 mem Description 在 \(n*n\) 的棋盤上給出 \(m\) 個黑點,若 \((x,y)\),\((y,z)\) 都是黑點,那麽 \((z,x)\) 也會變成黑點,求最後黑點的數量 題面

【概率與期望】AGC019 F Yes or No

分析: 首先,很容易搞出來一個N^2的DP做法,顯然會T,但是對發現正解有很大幫助: 將這個DP轉換為一個網格,就變為:從起始點(n,m)出發,到達目標點(0,0)的期望路徑長度。 首先,有一個很厲害的結論:因為每次都是按照最優策略選答案,所以不妨設n>=m,那麼一定能答對

AtCoder Grand Contest 067 F - Yakiniku Restaurants

題目傳送門:https://arc067.contest.atcoder.jp/tasks/arc067_d 題目大意: 有\(N\)家燒烤店,在直線上按順序排列,第\(i\)家燒烤店和第\(i+1\)家燒烤店的距離為\(A_i\)。你有\(M\)張燒烤券,在第\(i\)家燒烤店使用第\(j\)張券可以獲

Atcoder Grand Contest 002 F

題意 給你nnn種顏色的球,每個球有kkk個,把這nknknk個球排成一排,把每一種顏色的最左邊出現的球塗成白色(初始球不包含白色),求有多少種不同的顏色序列,答案對1e9+71e9 + 71e9+7

AtCoder Grand Contest 010 F - Tree Game

題目傳送門:https://agc010.contest.atcoder.jp/tasks/agc010_f 題目大意: 給定一棵樹,每個節點上有\(a_i\)個石子,某個節點上有一個棋子,兩人輪流操作:從棋子所在點上移出一個石子,並將棋子移動到相鄰的節點,不能操作的人為輸,問哪些節點放棋子使得先手必勝?

agc019f - Yes or No

urn one gpo stat return ret unique clas pass F - Yes or No Time limit : 2sec / Memory limit : 256MB Score : 2000 points Problem Statement

AtCoder Grand Contest 020 C - Median Sum

CI https TE ems and fin sub oot tco 題目:here 題解:要轉化一下,找所有子集的中間值,等價於找一個子集,滿足這個子集的和最接近整個序列的和的一半。也就是一個背包判斷可行性的問題。重點來了,bitset優化,至於為什麽?我也不懂啊啊啊

[Atcoder Grand Contest 001] Tutorial

IV AI display aps span col tin lap nbsp Link: AGC001 傳送門 A: #include <bits/stdc++.h> using namespace std; long long res=0; int n

AtCoder Grand Contest 024 Problem E(動態規劃)

stand 之間 graph ret scan 慢慢 rap and there www.cnblogs.com/shaokele/ AtCoder Grand Contest 024 Problem E   Time Limit: 2 Sec   Memory Lim

AtCoder Grand Contest #026 C - String Coloring

暴力 input 很好 left rgs map() paint int() letters Time Limit: 3 sec / Memory Limit: 1024 MB Score : 600600 points Problem Statement Y

Atcoder Grand Contest 002 題解

push_back 個人選擇 first box 可能 getc 等於 clear const A - Range Product 經過0答案肯定是0,都是正數肯定是正數,都是負數的話就奇負偶正。 //waz #include <bits/stdc++.h>

Atcoder Grand Contest 003 題解

位置 發現 clu cpp 模擬 gii icu define -a A - Wanna go back home 如果有S就必須要有N,反之亦然,如果有E必須要有W,反之亦然。判斷一下就好了。 //waz #include <bits/stdc++.h>

AtCoder Grand Contest 013 題解

fine esp square == ask air %d nis 就是 A - Sorted Arrays 貪心,看看不下降和不上升最長能到哪,直接轉移過去即可。 1 //waz 2 #include <bits/stdc++.h> 3 4 us

AtCoder Grand Contest 007

mem ssi || 狀態 puts def end tor ace AtCoder Grand Contest 007 A - Shik and Stone 翻譯 見洛谷 題解 傻逼玩意 #include<cstdio> int n,m,tot;char ch

AtCoder Grand Contest 015 題解

pan gin ken -- 出現 style 地方 連通塊 發現 A - A+...+B Problem 可以取到的值一定是一段區間。所以答案即為max-min+1 1 //waz 2 #include <bits/stdc++.h> 3 4 u

AtCoder Grand Contest 011

判斷 define 開機 %s square d+ 更新 getc 在一起 AtCoder Grand Contest 011 upd:這篇咕了好久,前面幾題是三周以前寫的。。。 AtCoder Grand Contest 011 A - Airport Bus 翻譯 有\

agc019FYes or No

Portal -->agc019F Description   給你\(n+m\)個詢問,其中\(n\)個的答案是\(Yes\),\(m\)個的答案是\(No\),現在依次回答這些詢問,每回答一個詢問就告訴你聽你回答對了還是沒對,求最優策略下答對題目期望數量對\(998244353\)取模    So

AtCoder Grand Contest 001 C Shorten Diameter 樹的直徑

題意 給你一棵樹,每次可以刪除一個葉子節點,求最少需要多少次操作可以讓樹的直徑\(<=k,(n <= 2e3)\) 首先觀察資料範圍是可以接受\(O(n^2)\)的演算法的 我們考慮列舉每個點作為樹的根 統計這個點一定在直徑上時要刪多少點 如果\(k\)是偶數,那麼深度大於\(