サフィックススリー
\ [制限時間: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 \) 。
分析で発見することができます:
- それがすべてです\(A \) 、必要\(0 \)ステップ
- すべてです\(P \)は、到達できません
- 最上/最下行または左端/右端の列は、すべてのある\(A \) 、必要\(1 \)ステップ
- 四隅は\(A \) 、必要\(2 \)ステップ
- 真ん中の行または中央の列が全て\(A \) 、必要(2 \)\ステップ
- 最上/最下行または左端/右端の列が持つ\(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メガバイト\]
留坑