A Eddy Walker
题意
你有n个点(0~n-1),按顺序形成一个环,初始时你在0的位子,你随机顺时针走一步或者逆时针走一步,
一旦你走到一个点后,环上所有点都被经过至少一次后,你就必须停下来。
问你最后停留在m这个位子的概率是多少。
思路
有意思的概率题。
读懂题意后发现这道题不难,模拟下可以发现在最后落在(1~n-1)的位子是等概率的,落在0这个位子是不可能的(除非n==1)。
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; #define pb push_back #define fi first #define se second #define debug(x) cerr<<#x << " := " << x << endl; #define bug cerr<<"-----------------------"<<endl; #define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; template<class T> void _R(T &x) { cin >> x; } void _R(int &x) { scanf("%d", &x); } void _R(ll &x) { scanf("%lld", &x); } void _R(double &x) { scanf("%lf", &x); } void _R(char &x) { scanf(" %c", &x); } void _R(char *x) { scanf("%s", x); } void R() {} template<class T, class... U> void R(T &head, U &... tail) { _R(head); R(tail...); } template<typename T> inline T read(T&x){ x=0;int f=0;char ch=getchar(); while (ch<‘0‘||ch>‘9‘) f|=(ch==‘-‘),ch=getchar(); while (ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x=f?-x:x; } const int inf = 0x3f3f3f3f; const int mod = 1e9+7; /**********showtime************/ ll ksm(ll a, ll b) { ll res = 1; while(b > 0) { if(b & 1) res = res * a % mod; a = a * a % mod; b = b >> 1; } return res; } int main(){ int T; scanf("%d", &T); ll res = 1; while(T--){ ll n,m; scanf("%lld%lld", &n, &m); if(n == 1 && m == 0) res = res; else { if(m == 0) res = res * 0; else { res = res * ksm(n-1, mod-2) % mod; } } printf("%lld\n", res); } return 0; }
B Eddy Walker 2
D Kth Minimum Clique
E MAZE
F Partition problem
比赛时过的,双向搜索降低复杂度(队友搞的,我还没搞)
I Inside A Rectangle
H Second Large Rectangle
比赛时过的。DP出面积,找出次大的
(队友搞的,我还没搞)
J Subarray
原文地址:https://www.cnblogs.com/ckxkexing/p/11219612.html
时间: 2024-10-30 07:58:16