Skip to content

Commit 3867603

Browse files
author
Shuo Xiang
committed
MemSQL problem A & B
1 parent f1c8f26 commit 3867603

File tree

4 files changed

+205
-0
lines changed

4 files changed

+205
-0
lines changed

Codeforces/335A.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import sys
2+
3+
4+
s = raw_input()
5+
n = input()
6+
7+
d = [0] * 40
8+
for i in s:
9+
d[ord(i) - 97] += 1
10+
11+
sn = len(filter(lambda x: x > 0, d))
12+
13+
if n < sn:
14+
print -1
15+
else:
16+
for ans in xrange(1, len(s) + 1):
17+
tmp = 0
18+
for i in xrange(40):
19+
tmp += (d[i] + ans - 1) / ans
20+
if tmp <= n:
21+
cnt = 0
22+
print ans
23+
for i in xrange(40):
24+
for j in xrange ((d[i] + ans - 1) / ans):
25+
cnt += 1
26+
sys.stdout.write(chr(i + 97))
27+
while cnt < n:
28+
sys.stdout.write('a')
29+
cnt += 1
30+
break
31+
32+
33+
34+
35+

Codeforces/335B.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <iostream>
4+
#include <string>
5+
6+
using namespace std;
7+
8+
const int N = 50011;
9+
10+
int d[2611][2611];
11+
int pa[2611][2611];
12+
int cnt[26];
13+
string s, ans;
14+
15+
void output (int x, int y) {
16+
if (x > y) return;
17+
if (x == y) { ans += s[x-1]; return;}
18+
19+
if (!pa[x][y]) {
20+
ans += s[x-1];
21+
output (x + 1, y - 1);
22+
ans += s[y-1];
23+
}
24+
else if (pa[x][y] == 1)
25+
output (x + 1, y);
26+
else
27+
output (x, y - 1);
28+
}
29+
30+
int main () {
31+
int i, j, k;
32+
cin >> s;
33+
int sn = s.size ();
34+
for (i = 0; i < sn; cnt[s[i++] - 'a'] ++);
35+
36+
for (i = 0; i < 26; ++i) {
37+
if (cnt[i] >= 100) {
38+
for (j = 0; j < 100; ++j)
39+
printf ("%c", i + 'a');
40+
printf ("\n");
41+
return 0;
42+
}
43+
}
44+
45+
int x, y, m = -1;
46+
47+
for (k = 1; k <= sn; ++k)
48+
for (i = 1; i + k - 1 <= sn; ++i) {
49+
j = i + k - 1;
50+
if (k == 1)
51+
d[i][k] = 1, pa[i][j] = 1;
52+
else {
53+
if (d[i+1][k-1] >= d[i][k-1])
54+
pa[i][j] = 1;
55+
else
56+
pa[i][j] = -1;
57+
int ma = max (d[i+1][k-1], d[i][k-1]);
58+
if (s[i-1]==s[j-1] && 2 + d[i+1][k-2] >= ma) {
59+
ma = 2 + d[i+1][k-2];
60+
pa[i][j] = 0;
61+
}
62+
d[i][k] = ma;
63+
if (d[i][k] == 100) {
64+
output (i, j);
65+
cout << ans << endl;
66+
return 0;
67+
}
68+
}
69+
if (d[i][k] > m)
70+
m = d[i][k], x = i, y = j;
71+
}
72+
output (x, y);
73+
sn = ans.size();
74+
if (sn > 100) {
75+
for (i = 0; i < 50; ++i)
76+
cout << ans[i];
77+
for (i = sn - 50; i <= sn - 1; ++i)
78+
cout << ans[i];
79+
cout << endl;
80+
}
81+
else
82+
cout << ans << endl;
83+
return 0;
84+
}

Codeforces/Abbyy/331A2.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <map>
4+
#include <cmath>
5+
#include <cstring>
6+
7+
8+
using namespace std;
9+
10+
const int N = 300011;
11+
map<int,int> ord, rev;
12+
long long possum[N];
13+
int cntneg[N];
14+
15+
int a[N], n;
16+
17+
long long f(int x, int y) {
18+
return possum[y-1]-possum[x] + a[x] + a[y];
19+
}
20+
21+
int g(int x, int y) {
22+
return cntneg[y-1]-cntneg[x];
23+
}
24+
25+
int main () {
26+
int i, j, k;
27+
scanf ("%d", &n);
28+
memset(cntneg, 0, sizeof(cntneg));
29+
memset(possum, 0, sizeof(possum));
30+
31+
for (i = 1; i <= n; ++i) {
32+
scanf ("%d", &a[i]);
33+
possum[i] = possum[i-1] + max(a[i], 0);
34+
cntneg[i] = cntneg[i-1] + (a[i] < 0 ? 1 : 0);
35+
if (ord.find(a[i]) != ord.end()) continue;
36+
else ord[a[i]] = i;
37+
}
38+
for (i = n; i >= 1; --i) {
39+
if (rev.find(a[i]) != rev.end()) continue;
40+
else rev[a[i]] = i;
41+
}
42+
int bestx, besty;
43+
long long best = -1000000000000000;
44+
for (i = 1; i <= n; ++i) {
45+
int x = ord[a[i]], y = rev[a[i]];
46+
if (x != i || ord[a[i]] == rev[a[i]]) continue;
47+
long long t;
48+
if ((t = f(x, y)) > best) {
49+
best = t;
50+
bestx = x;
51+
besty = y;
52+
}
53+
54+
}
55+
printf ("%I64d %d\n", best, g(bestx, besty) + bestx - 1 + n - besty);
56+
for (i = 1; i < bestx; printf("%d ", i++));
57+
for (i = bestx + 1; i < besty; ++i)
58+
if (a[i] < 0) printf ("%d ", i);
59+
for (i = besty+1; i <= n; printf("%d ", i++));
60+
return 0;
61+
}

Codeforces/Div II/CF327C_191.scala

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
object CF327C_191 extends App {
2+
val s = Console.readLine
3+
val n : Long = s.size.toLong
4+
val k : Long = Console.readLine.toLong
5+
val md = 1000000007L
6+
7+
def p2(y : Long, x : Long) : Long = {
8+
if (x == 0) 1 else {
9+
val t = p2(y, x/2)
10+
if (x % 2 == 0) (t * t) % md else (((y * t) % md) * t) % md
11+
}
12+
}
13+
14+
def inv(x : Long) : Long = {
15+
p2(x, md - 2)
16+
}
17+
18+
val res = (0 until n.toInt).map{
19+
x => if (s(x) == '0' || s(x) == '5') p2(2, x) else 0
20+
}.reduce((x, y) => (x + y) % md)
21+
22+
val outer = (p2(2, k * n) - 1 + md) % md * inv((p2(2, n) - 1 + md)% md) % md
23+
24+
println (res * outer % md)
25+
}

0 commit comments

Comments
 (0)