F、 Infinite String Comparision

题意:给两个字符串,假设,如果输出输出输出
思路:如果a的长度小于b,那么直接比较a、b救可以了,所以我们要考虑a!=b的情况。
假设a的长度小于b,(A、B是为了区分字符串中的字符)

  123
A=aba
B=abaa

aba|aba|aba...
abaa|abaa...

先比较,如果没有全部相等,那么答案就是第一个非等于的结果。
当全部都相等时,。从上面可以知道,无限循环比较时我们还要比较,全部都相等时,(就需不需要继续比较了,答案就是相等),如果没有全部相等,那么答案就是第一个非等于的结果。因为,所以我们可以换种比较方法:

X=aba|abaa
Y=abaa|abaa

答案就是X和Y比较的结果。
Code:

#include<bits/stdc++.h>
#define  js  ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
string a,b;
int main() {
    js;
    while(cin>>a>>b) {
        string x=a+b,y=b+a;
        if( x > y ) cout<<">"<<endl;
        else if ( x < y ) cout<<"<"<<endl;
        else cout<<"="<<endl;
    }
}

J、 Easy Integration

图片说明
是不断分部积分解出表达式,然后费马小定理和阶乘打表。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 998244353;
const int N = 1e6 + 5;
ll qkpow(ll a, ll b) {
    ll ans = 1;
    while (b) {
        if (b & 1) ans = ans * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}
ll getInv(ll a) { return qkpow(a, mod - 2); }  //求一个数的逆元
ll fac[N * 2];
int main() {
    fac[0] = 1;
    for (int i = 1; i < N * 2; ++i) fac[i] = fac[i - 1] * i % mod;
    int n;
    while (cin >> n)
        cout << fac[n] * fac[n] %mod * getInv(fac[2 * n + 1]) % mod << endl;
    return 0;
}