Codeforcesラウンド#607(本部2)問題への解決策

サフィックススリー

\ [制限時間:1秒\
クワッドメモリ制限:256メガバイト\] 直接の質問の意味に従ってシミュレートすることができます。


ビュー

#include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define  lowbit(x)  x & (-x)
#define  mes(a, b)  memset(a, b, sizeof a)
#define  fi         first
#define  se         second
#define  pb         push_back
#define  pii        pair<int, int>
#define  INOPEN     freopen("in.txt", "r", stdin)
#define  OUTOPEN    freopen("out.txt", "w", stdout)

typedef unsigned long long int ull;
typedef long long int ll;
const int    maxn = 1e5 + 10;
const int    maxm = 1e5 + 10;
const ll     mod  = 1e9 + 7;
const ll     INF  = 1e18 + 100;
const int    inf  = 0x3f3f3f3f;
const double pi   = acos(-1.0);
const double eps  = 1e-8;
using namespace std;

int n, m;
int cas, tol, T;

char s[maxn];

int main() {
    scanf("%d", &T);
    while(T--) {
        scanf("%s", s+1);
        n = strlen(s+1);
        reverse(s+1, s+1+n);
        if(s[1]=='o' && s[2]=='p') {
            puts("FILIPINO");
        } else if(s[1]=='u'&&s[2]=='s'&&s[3]=='e'&&s[4]=='d') {
            puts("JAPANESE");
        } else if(s[1]=='u'&&s[2]=='s'&&s[3]=='a'&&s[4]=='m') {
            puts("JAPANESE");
        } else if(s[1]=='a'&&s[2]=='d'&&s[3]=='i'&&s[4]=='n'&&s[5]=='m') {
            puts("KOREAN");
        } 
    }
    return 0;
}

Azamon Webサービス

\ [制限時間:2秒\
クワッドメモリ制限:256メガバイト\] で(P [] \)\文字列からレコード\(I \)最小限のバック手紙。

各裁判官はちょうどに必要な交換左の位置、文字以内のEnumeration 1ペア\(S [i]が\)\(S [P [i]の ] \) の交換、あなたは可能な限り小さく、この文字列をさせることができ、第二列は、条件が満たされているかどうかを確認するために比較されます。


ビュー

#include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define  lowbit(x)  x & (-x)
#define  mes(a, b)  memset(a, b, sizeof a)
#define  fi         first
#define  se         second
#define  pb         push_back
#define  pii        pair<int, int>
#define  INOPEN     freopen("in.txt", "r", stdin)
#define  OUTOPEN    freopen("out.txt", "w", stdout)
 
typedef unsigned long long int ull;
typedef long long int ll;
const int    maxn = 1e5 + 10;
const int    maxm = 1e5 + 10;
const ll     mod  = 1e9 + 7;
const ll     INF  = 1e18 + 100;
const int    inf  = 0x3f3f3f3f;
const double pi   = acos(-1.0);
const double eps  = 1e-8;
using namespace std;
 
int n, m;
int cas, tol, T;
 
string s1, s2;
int p[maxn];
 
int main() {
    scanf("%d", &T);
    while(T--) {
        cin >> s1 >> s2;
        n = s1.size(), m = s2.size();
        for(int i=0; i<n; i++)  p[i] = i;
        int pos = n-1;
        for(int i=n-2; i>=0; i--) {
            if(s1[i] < s1[pos]) pos = i;
            p[i] = pos;
        }
        int flag = 0;
        for(int i=0; i<min(n, m); i++) {
            swap(s1[i], s1[p[i]]);
            if(s1 < s2) {
                flag = 1;
                cout << s1 << endl;
                break;
            }
            swap(s1[i], s1[p[i]]);
        }
        if(!flag)   cout << "---" << endl;
    }
    return 0;
}

カット&ペースト

\ [制限時間:2秒\
クワッドメモリ制限:256メガバイト\] 以来\(1 \のLeq X \のLeq 6 10 ^ \。) 最初に暴力を知ることが可能である\(X \)文字列に見えるように。

文字列の長さを超えた場合、\(Xを\) 文字列のような次の外観は、カーソルがここに到着したことがないため、長さの影響を直接計算することができ、問題ではありません。


ビュー

#include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define  lowbit(x)  x & (-x)
#define  mes(a, b)  memset(a, b, sizeof a)
#define  fi         first
#define  se         second
#define  pb         push_back
#define  pii        pair<int, int>
#define  INOPEN     freopen("in.txt", "r", stdin)
#define  OUTOPEN    freopen("out.txt", "w", stdout)

typedef unsigned long long int ull;
typedef long long int ll;
const int    maxn = 1e5 + 10;
const int    maxm = 1e5 + 10;
const ll     mod  = 1e9 + 7;
const ll     INF  = 1e18 + 100;
const int    inf  = 0x3f3f3f3f;
const double pi   = acos(-1.0);
const double eps  = 1e-8;
using namespace std;

int n, m;
int cas, tol, T;

string s, ss;

int main() {
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        cin >> s;
        int p = -1;
        ll len = s.size();
        int flag = 0;
        for(int i=1; i<=n; i++) {
            p++;
            if(!flag)   ss = s.substr(p+1, s.size()-1);
            int t = s[p]-'0';
            ll tlen = len-p-1;
            tlen = (tlen%mod+mod)%mod;
            for(int j=2; j<=t; j++) {
                if(!flag) s += ss;
                if(len + tlen>=n)   flag = 1;
                len = (len+tlen)%mod;
            }
        }
        printf("%lld\n", len);
    }
    return 0;
}

Beingawesomeism

\ [制限時間:2秒\
クワッドメモリ制限:256メガバイト\] まず第一に限りがあるので、見つけることができます\(A \)は、私が唯一のアップに費やす必要があり(\ 4)\答えはでなければならないので、最終状態に到達するために、手順\(0,1,2,3,4、MORTAL \) 。

分析で発見することができます:

  1. それがすべてです\(A \) 必要\(0 \)ステップ
  2. すべてです\(P \)は、到達できません
  3. 最上/最下行または左端/右端の列は、すべてのある\(A \) 必要\(1 \)ステップ
  4. 四隅は\(A \) 必要\(2 \)ステップ
  5. 真ん中の行または中央の列が全て\(A \) 必要(2 \)\ステップ
  6. 最上/最下行または左端/右端の列が持つ\(A \) 必要に\(3 \)ステップ

暴力はそれぞれのケースを議論することができます。


ビュー

#include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define  lowbit(x)  x & (-x)
#define  mes(a, b)  memset(a, b, sizeof a)
#define  fi         first
#define  se         second
#define  pb         push_back
#define  pii        pair<int, int>
#define  INOPEN     freopen("in.txt", "r", stdin)
#define  OUTOPEN    freopen("out.txt", "w", stdout)

typedef unsigned long long int ull;
typedef long long int ll;
const int    maxn = 1e5 + 10;
const int    maxm = 1e5 + 10;
const ll     mod  = 1e9 + 7;
const ll     INF  = 1e18 + 100;
const int    inf  = 0x3f3f3f3f;
const double pi   = acos(-1.0);
const double eps  = 1e-8;
using namespace std;

int n, m;
int cas, tol, T;

char s[70][70];

int solve() {
    int ans = 4;
    if(s[1][1]=='A' || s[1][m]=='A' || s[n][1]=='A' || s[n][m]=='A')    ans = min(ans, 2);
    {
        bool f1 = true, f2 = true, f = false;
        for(int j=1; j<=m; j++) {
            if(s[1][j] == 'P')  f1 = false;
            if(s[n][j] == 'P')  f2 = false;
            if(s[1][j] == 'A')  f = true;
            if(s[n][j] == 'A')  f = true;
        }
        if(f1 || f2)    ans = min(ans, 1);
        bool f3 = true, f4 = true;
        for(int i=1; i<=n; i++) {
            if(s[i][1] == 'P')  f3 = false;
            if(s[i][m] == 'P')  f4 = false;
            if(s[i][1] == 'A')  f = true;
            if(s[i][m] == 'A')  f = true;
        }
        if(f3 || f4)    ans = min(ans, 1);
        if(f)   ans = min(ans, 3);
    }
    {
        bool f = true;
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=m; j++) {
                if(s[i][j] == 'P')  f = false;
            }
            if(!f)  break;
        }
        if(f)   ans = min(ans, 0);
    }
    {
        for(int i=1; i<=n; i++) {
            int cnt = 0;
            for(int j=1; j<=m; j++) {
                cnt += s[i][j]=='A';
            }
            if(cnt == m)    ans = min(ans, 2);
        }
        for(int j=1; j<=m; j++) {
            int cnt = 0;
            for(int i=1; i<=n; i++) {
                cnt += s[i][j]=='A';
            }
            if(cnt == n)    ans = min(ans, 2);
        }
    }
    return ans;
}

int main() {
    scanf("%d", &T);
    while(T--) {
        scanf("%d%d", &n, &m);
        int flag = 0;
        for(int i=1; i<=n; i++) {
            scanf("%s", s[i]+1);
            if(flag)    continue;
            for(int j=1; j<=m; j++) {
                if(s[i][j] == 'A')  flag = 1;
            }
        }
        if(flag == 0)   printf("MORTAL\n");
        else    printf("%d\n", solve());
    }
    return 0;
}

ジェレミーBearimy

\ [制限時間:3秒\
クアッドメモリ制限:256メガバイト\] 私はことを...こするの書き込みコードは考え、私はあまりにもハードです

作りたい\(\和Fは、(i) \) 最大、確かに権利を作る遠い2点を取るための時間です。あなたは可能な限り小さく、それをできるようにしたい場合は、右を作るために、それぞれ隣接する2つの点を聞かせしようと、我々は、各辺の寄与を考慮することができます。

接続があると仮定\(U \)\(V \)側、右側値\(W \) 次いで、もし\(U \)\(X \)点、\(V \)側そこ\(Y \)ポイント

ほとんどが、私は試してから確信している場合には(U \)\にも、側道(V \)\側は、このエッジが支出されます\(分(x、y)は \) 回。

ほとんどの時間、場合(X \)は\でも、それからです\(Y \) とても肯定と確かに偶数、と私はトライ近い上の点の同じペアを作りたい\(U \)点側ペアワイズ、の港ペア\(V \)点側ペアワイズ港対。私が選択した場合ので\(U \)をし、(V \)\港区のペアは、その後、双方はポイントを逃している、二回数え非常に多くのペアで一緒にこすりする必要があります\(\ w)が明らかに損失、 。
場合は\(X \)は、奇数である(Y- \)\それは奇妙確かに、確かから1組を選択するには、この時間(U \)\に側(V \)\側は、その後、私が選択することができます(U \)\\(V \)港対、次いで残りの二つがあっても、それぞれをプールすることができるされています。


ビュー

#include <map>
#include <set>
#include <list>
#include <tuple>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define  lowbit(x)  x & (-x)
#define  mes(a, b)  memset(a, b, sizeof a)
#define  fi         first
#define  se         second
#define  pb         push_back
#define  pii        pair<int, int>
#define  INOPEN     freopen("in.txt", "r", stdin)
#define  OUTOPEN    freopen("out.txt", "w", stdout)

typedef unsigned long long int ull;
typedef long long int ll;
const int    maxn = 2e5 + 10;
const int    maxm = 1e5 + 10;
const ll     mod  = 1e9 + 7;
const ll     INF  = 1e18 + 100;
const int    inf  = 0x3f3f3f3f;
const double pi   = acos(-1.0);
const double eps  = 1e-8;
using namespace std;

int n, m;
int cas, tol, T;

ll ans1, ans2;
vector<pii> g[maxn];
ll sz[maxn];

void dfs(int u, int fa) {
    sz[u] = 1;
    for(auto v : g[u])  if(v.fi != fa) {
        dfs(v.fi, u);
        sz[u] += sz[v.fi];
        if(sz[v.fi]&1)  ans1 += v.se;
        ans2 += min(sz[v.fi], n-sz[v.fi])*v.se;
    }
}

int main() {
    scanf("%d", &T);
    while(T--) {
        int k;
        scanf("%d", &k);
        n = 2*k;
        for(int i=1; i<=n; i++) g[i].clear();
        for(int i=2, u, v, w; i<=n; i++) {
            scanf("%d%d%d", &u, &v, &w);
            g[u].pb({v, w});
            g[v].pb({u, w});
        }
        ans1 = ans2 = 0;
        dfs(1, 0);
        printf("%lld %lld\n", ans1, ans2);
    }
    return 0;
}

ミスPunyverse

\ [制限時間:4秒\クワッドメモリ制限:256メガバイト\]
留坑

おすすめ

転載: www.cnblogs.com/Jiaaaaaaaqi/p/12052180.html