53回の練習オフ牛(更新します)

53回の練習オフ牛(更新します)

トピックリンク:リンク

姉妹校を超えた愛の文字列

問題の意味:長さNの文字列、唯一のC、Yの文字列の連続とC.できません

アイデア:実際にはDP、\(DP [I] [C]は\)の長さを表し、\を(私は\)するために、(C \)\種の列番号の末尾に。:全体の状態方程式有する
\ [DP [I] [C] = Dpを[-I 1] [Y] \\ Dpを[I] [Y] = Dpを[-I 1] [C] + Dpの[I-します。 1] [Y] \]
のみという事実にフィボナッチ列を検索します。

コード

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
const ULL MOD = 1000000000 + 7;
const int maxn = 100000 + 13;
ULL Dp[maxn][2];

void Init() {
    // 0 --> Y, 1 ---> C
    memset(Dp, 0, sizeof(Dp));
    Dp[0][0] = Dp[0][1] = 0;
    Dp[1][0] = Dp[1][1] = 1;
    for(int i = 2; i < maxn; ++i) {
        Dp[i][0] = (Dp[i-1][0] + Dp[i-1][1]) % MOD;
        Dp[i][1] = Dp[i-1][0];
    }
}

int main() {
    
    Init();
    int n;
    while(scanf("%d", &n) != EOF) {
        ULL sum = (Dp[n][0] + Dp[n][1]) % MOD;
        printf("%lld\n", sum);
    }
    return 0;
}

Bおいしいゼリー

問題の意味:$ \ sum_ {i = 1 } ^ {n}は\ sum_ {J = 1} ^ {I} {i *が[\ FRAC {I} {J}] ^ {jは}} $ の質問の簡単な暴力の意味を。

考える:この質問は法律を見つけることです。書かれた具体的な計算式は、定期的に見つかりました。次のように:
。\ [\ \\ 1 ^ 2 1 \\&2 ^ 2 \ \ 2 *&{左=整列}開始・3 ^ 2 \ \ 3 * 1 ^ 2 \ \ 3 * 1 ^ 3 \\&4 ^ 2 \ \ 4。。。。。。。。 * ^ 2 2 \ \ 4 * ^ 3 1 \ \ 4 * 1 ^ 4 \\&\ cdots \\&N ^ 2 \ \ N * [\ FRAC {n}は{2}] ^ 2 \ \ N * [\ FRAC {N} {3}]
^ 3 \ cdots N * 1 \エンドN ^ \] {整列} 最初の列である\(\ sum_i ^のNi ^ 2 \) 最初の\(J \)の列は、開始します中([\ FRAC {N} \ {J}] \) 遮断します。

コード

int main() {
    false_stdio;
    cin >> n;
    for (ll j = 1; j <= n; j++) {
        num[j] = j;
        ans = (ans + j * j % mod) % mod;
    }
    for (ll j = 2; j <= n; j++) {
        cnt = n / j;
        ll L = j;
        for (int i = 1; i < cnt; i++) {
            tot = (L * j + (j * (j - 1) >>1)) % mod;
            num[i] = num[i] * i % mod;
            ans = ans + tot * num[i] % mod;
            L += j;
        }
        num[cnt] = num[cnt] * cnt % mod;
        tot = (n - cnt * j + 1) % mod;
        ans =ans+ (L * tot % mod + (tot * (tot - 1)>>1)) % mod * num[cnt] % mod;
 
    }
    ans = (ans + mod) % mod;
    cout << ans << endl;
    return 0;
}

ケイ一致文字列リーガル

質問の意味:0-1文字列マッチング、「_」をどのように多くの成功したマッチのワイルドカード、出力を表しています。

アイデア:あなたはこのビットセット質問を行うために使用できるように、文字列は、0-1ですので。操作が一致するか否かに応じて、対応するビットに等しいです。

コード

int cnt = 0;
bitset<1005> p;
bitset<1005> q;
cin >> str;
for(int j = 0; j < m; ++j) {
   char c = str[j];
   if(c == '0') {
      q[j] = 0; p[j] = 1;
   } else if(c == '1') {
      p[j] = q[j] = 1;
   } else if(c == '_') {
      p[j] = q[j] = 0;
   }
}
for(int i = 0; i < n; ++i) {
   if((p&Str[i]) == q) cnt ++;
}
cout << cnt << endl;

おすすめ

転載: www.cnblogs.com/aoxuets/p/11666224.html