這種題就是打表,什麼性質不性質的不重要
不知道我打錶出的式子怎麼解釋,,
粘一下題解做法吧
"考慮每一位的貢獻,從低到高的第\(i\)位會每隔\(2^i\)個數變化一次,於是第$$i位對答案的貢獻就是\(\lfloor\frac\rfloor\),
把每一位的貢獻加起來即可。"
我的**
code
#include using namespace std;
unsigned long long n;
int main()
printf("%llu\n",ans+n);
return 0;
}
考場理解錯了題意,導致送的分都沒拿到
考慮\(n=2\)的情況
設\(dp[i][j]\)表示第一種顏色的球剩\(i\)個,第二種顏色的球剩\(j\)個對手中籌碼的最大貢獻,也可以說是表示你當前有1個籌碼,箱子裡兩種顏色的球分別有\(i,j\)個,你最終能獲得多少籌碼,這個「1」是單位「1」
由於幕後**肯定會按你得籌碼最少的情況掉球,所以在最優策略下,不同的掉球情況下最終所能獲得的籌碼數應該相同
假設你在第一種顏色上押\(x\)個籌碼,在第二種顏色上押\(y\)個籌碼,有\(x\times dp[i-1][j]=y\times dp[i][j-1]\)又有\(x+y=1\)可以解得\(x\)
容易發現全押一定比不押優(\(dp[i][j]>=1\)),於是有\(dp[i][j]=\frac\)
發現那個係數\(2\)看著不好看,而且可以最後再乘上
所以設\(f[i][j]\times 2^=dp[i][j]\)
那麼有\(\frac=\frac+\frac\)
好眼熟,這不是二維圖中只能向右上走的方案數嗎,直接\((^_)\)
答案就是\(\frac}_)}\)
結論可以擴充套件到多維情況
code
#include #include using namespace std;
const int mod=998244353;
const int maxn=1000005;
int n,x[maxn+15];
long long jc[maxn+15],inv[maxn+15];
long long qpow(long long x,long long y)
return ans;
}void ycl()
long long get_c(int n,int m)
int main()
printf("%lld\n",ans*qpow(in,mod-2)%mod);
return 0;
}
題解不做人,給了個錯誤式子。。
正解確實要斯特林數,但是還需要換根\(dp\)
有\(x^k=\sum_^k \begink\\ i\end\times x^\)
\((x+1)^=i\times x^}+x^\)
設\(f[i][j]\)表示\(i\)子樹內到\(i\)距離的\(j\)次下降冪之和,\(g[i][j]\)表示\(i\)子樹內到\(i\)的父親距離的\(j\)次下降冪之和
\(f_=\sum_g_\)
\(g_=j\times f_+f_\)
看碼注釋吧。。
code#include #include using namespace std;
const int maxn=1000005;
const int maxk=105;
const int mod=998244353;
const int inv_2=499122177;//2在%mod意義下的逆元
struct edgee[maxn<<1|1];
int head[maxn],tot,n,k;
void add(int u,int v)
int s[maxk][maxk];//斯特林數
int f[maxn][maxk];//f[x][i]x子樹內所有點到x的距離的i次下降冪之和
int g[maxn][maxk];//g[x][i]x子樹內所有點到x的父親距離的i次下降冪之和
void pre()
void dfs(int x,int fa)
}++f[x][0];
for(int i=k;i;--i)
g[x][i]=(1ll*i*f[x][i-1]%mod+f[x][i])%mod;//x+1的i次下降冪==(x的i-1次下降冪乘以i )+x的i次下降冪
g[x][0]=f[x][0];
}int tmp[maxk],sum[maxk];
//換根dp,統計所有點到當前根的貢獻,每條路徑會被計算兩次,最後需要乘2的逆元
void dfs_get(int x,int fa)
for(int i=head[x];i;i=e[i].net)
}int main()
d[x].dfsr=tmp;
}struct askak[maxn];
int fk[gm][gm],yk[maxn],pos[maxn],ans[maxn];
void work1()
if(ak[i].x!=mod)continue;
if(pos[ak[i].l]==pos[ak[i].r])else
int query(int posi)
}for(int i=dl;i<=dr;++i){
int s=v[i-dl].size();
for(int j=0;j
NOIP提高組模擬賽3
周圍大佬都說初中打過n遍,我乙個菜雞瑟瑟發抖。把斐波那契數列寫出來找了半天性質,用了半個多小時推出來 x兔子的父親,就是x減去是在斐波那契數列中最大的小於x的數 舉個栗子 13號兔子,應減去8,得到他的祖先5 10號兔子,應減去8,得到他的祖先2 預處理出斐波那契數列,然後讓ab中較大的到他的祖先,...
NOIP提高組模擬賽4
丹青千秋釀,一醉解愁腸 無悔少年枉,只願壯志狂 矩陣字首和加暴力 o n 2m 2 60pts有手就行 觀察資料範圍,猜測應該是求一種 o n 3 的演算法,想到之前做的題,應該是 n 2 枚舉行,n 處理乙個序列的答案,然後,就沒有然後了 對於乙個序列,求子段和為k的倍數,如何 o n 求解,考慮...
NOIP提高組模擬賽6
這題看著真熟啊,好像把之前的english,入陣曲雜糅了一下。首先,像入陣曲一樣計算出字首和 s 式子可以轉化為求 s r s l 1 equiv max mod k 像english一樣 用單調棧處理出以x為最大值的區間,分區間求解 每次列舉一側區間,已知max,只要知道另一側有多少與之餘數相同的...