H
签到,只是组合数取模需要注意一下
#include <bits/stdc++.h>
using namespace std ;
#define ull unsigned long long
#define ll long long
#define endl '\n'
#define int long long
const int N = 2*1000005;
const int mod = 998244353;
int t,n,q;
int x,y;
int j[N],invj[N];
int c[N];
int ans = 0;
ll powmod(ll aa, ll bb) {
ll ret = 1;
for (; bb; bb >>= 1) {
if (bb & 1) ret = ret * aa % mod;
aa = aa * aa % mod;
}
return ret;
}
void je() {
j[0] = 1;
j[1] = 1;
for(int i=1;i<N;i++) {
j[i] = j[i-1] * i % mod;
}
invj[N-1] = powmod(j[N-1],mod-2);
for(int i=N-2;i>=1;i-- ) {
invj[i] = (invj[i+1] * (i+1ll) % mod);
}
}
void init()
{
j[0] = 1;
j[1] = 1;
for(int i = 1 ; i < N ;i ++ )
{
j[i] = j[i - 1] * i % mod;
}
invj[N - 1] = powmod(j[N - 1], mod - 2);
for (int i = N - 2; i >= 1; i -- )
invj[i] = (invj[i + 1] * (i + 1ll) % mod);
}
int calc(int x,int y) {
if(x==0 ) return 1;
if(y==x) return 1;
if(x>y) return 0;
return j[y] * invj[x] % mod *invj[y-x] % mod;
}
int cac(int a ,int b)
{
if (a < b) return 0;
if(b == 0) return 1;
if(a == b) return 1;
return j[a] * invj[b] % mod * invj[a - b] % mod;
}
int a7[10],b7[10];
void solve() {
//init();
je();
for(int i=1;i<=8;i++) {
cin>>a7[i];
}
for(int i=1;i<=8;i++) {
cin>>b7[i];
}
x = (a7[1]+9) / 10;
y = (b7[1]+9) / 10;
for(int i=0;i<x;i++) {
ans = (ans + calc(i,i+y-1) % mod * powmod(powmod(2,i+y)%mod,mod-2)%mod ) % mod;
}
cout<<ans<<endl;
}
signed main () {
ios::sync_with_stdio(false) ,cin.tie(0);
t=1;
while (t--) {
solve();
}
}
F
记录终点倒着寻找能够抵达的点
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> v[105];
int sets[105];
queue<int> q;
int paths[105];
int n, m, s, t;
void bfs() {
q.push(t);
sets[t] = 1;
while (q.size()) {
int cur = q.front();
q.pop();
for (int to: v[cur]) {
if (sets[to]) continue;
paths[to]++;
if (paths[to] >= 2) {
sets[to] = 1;
q.push(to);
}
}
}
}
signed main() {
int a;
cin >> a;
int x, y;
while (a--) {
cin >> n >> m >> s >> t;
for (int i = 1; i <= n; i++) {
paths[i] = 0;
sets[i] = 0;
v[i].clear();
}
for (int i = 1; i <= m; i++) {
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
bfs();
if (sets[s]) {
cout << "Join Player" << endl;
} else {
cout << "Cut Player" << endl;
}
}
}