題目鏈結
題意:
問你從(1,1)到(a,b)有幾種走法
思路;這個題我們集訓隊的大佬提供了很好的思路,我們起始位置在(1,1)可以走到(2,1) (3,2)(2,2)
座標分別增加了(1,0) (2,1) (1,1) 我們可以將三個看成三個向量 對於要達到的目的(a,b
)可以列出乙個
等式: x(1,0)+y(2,1)+z(1,1)+(1,1)=(a,b) 可以列出兩個方程.x+2*y+z=a-1,y+z=b-1. (x,y,z分別表示往(1,0),(2,1),(1,1)方向走了幾次),那麼可以的到走法為c(x+y+z,x)*c(y+z,y)*c(z,z)。因為只有兩個方程三個未知數
所以我們需要列舉乙個然後求結果.a,b最多為1e5,組合數問題用費馬小定理求逆元來解決就可以了
#include#define ri(a) scanf("%d", &a)
#define rl(a) scanf("%lld", &a)
#define rf(a) scanf("%lf", &a)
#define rs(a) scanf("%s", a)
#define pi(a) printf("%d\n", (a))
#define pf(a) printf("%lf\n", (a))
#define pl(a) printf("%lld\n", (a))
#define ps(a) printf("%s\n", (a))
#define w(a) while(a--)
#define clr(a, b) memset(a, (b), sizeof(a))
#define mod 1000000007
#define inf 0x3f3f3f3f
#define exp 0.00000001
#define pii pair#define mp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll f[maxn+1],inv[maxn+1];
int a,b,x,y,z;
ll quickpow(ll w,ll l)
return ans;
}void init()
return ;
}ll c(int n,int k)
{ if(n
389 找不同(亦或運算)
package test 389.找不同 給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。示例 輸入 s abcd t abcde 輸出 e 解釋 e 是那個被新增的字母。public class number ...
leetcode題目 389 找不同
給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。輸入 s abcd t abcde 輸出 e 解釋 e 是那個被新增的字母。先用hashmap統計t t為較長的那個字串 的字母頻率,然後再遍歷s的字母,遇到乙個字...
LeetCode題解 389 找不同
瞧一瞧 求star 給定兩個字串 s 和 t,它們只包含小寫字母。字串 t 由字串 s 隨機重排,然後在隨機位置新增乙個字母。請找出在 t 中被新增的字母。示例 輸入 s abcd t abcde 輸出 e 解釋 e 是那個被新增的字母。思路 var findthedifference functi...