Skip to content

Commit 8d320ca

Browse files
committed
141 added
1 parent 8382958 commit 8d320ca

File tree

5 files changed

+245
-0
lines changed

5 files changed

+245
-0
lines changed

Codeforces/191C_watashi.cpp

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#include <cstdio>
2+
#include <vector>
3+
4+
using namespace std;
5+
6+
const int MAXB = 17;
7+
const int MAXN = 1 << MAXB;
8+
9+
vector<pair<int, int> > e[MAXN];
10+
int v[MAXN], c[MAXN], d[MAXN], r[MAXN], p[MAXN][MAXB];
11+
12+
void dfs(int v, int f) {
13+
p[v][0] = f;
14+
for (int i = 1; i < MAXB; ++i) {
15+
p[v][i] = p[p[v][i - 1]][i - 1];
16+
}
17+
for (auto& i: e[v]) {
18+
if (i.first == f) {
19+
continue;
20+
}
21+
d[i.first] = d[v] + 1;
22+
r[i.first] = i.second;
23+
dfs(i.first, v);
24+
}
25+
}
26+
27+
int go(int v, int d) {
28+
for (int i = 0; i < MAXB; ++i) {
29+
if (d & (1 << i)) {
30+
v = p[v][i];
31+
}
32+
}
33+
return v;
34+
}
35+
36+
int lca(int i, int j) {
37+
if (d[i] > d[j]) {
38+
swap(i, j);
39+
}
40+
j = go(j, d[j] - d[i]);
41+
if (i == j) {
42+
return i;
43+
}
44+
for (int k = MAXB - 1; k >= 0; --k) {
45+
if (p[i][k] != p[j][k]) {
46+
i = p[i][k];
47+
j = p[j][k];
48+
}
49+
}
50+
return p[i][0];
51+
}
52+
53+
void gao(int v, int f) {
54+
for (auto& i: e[v]) {
55+
if (i.first == f) {
56+
continue;
57+
}
58+
gao(i.first, v);
59+
c[i.second] = ::v[i.first];
60+
::v[v] += ::v[i.first];
61+
}
62+
}
63+
64+
int main() {
65+
int n, m, a, b;
66+
67+
scanf("%d", &n);
68+
for (int i = 1; i < n; ++i) {
69+
scanf("%d%d", &a, &b);
70+
--a;
71+
--b;
72+
e[a].push_back({b, i});
73+
e[b].push_back({a, i});
74+
}
75+
d[0] = 0;
76+
dfs(0, 0);
77+
78+
scanf("%d", &m);
79+
for (int i = 0; i < m; ++i) {
80+
scanf("%d%d", &a, &b);
81+
--a;
82+
--b;
83+
++v[a];
84+
++v[b];
85+
v[lca(a, b)] -= 2;
86+
}
87+
gao(0, 0);
88+
89+
for (int i = 1; i < n; ++i) {
90+
printf("%d ", c[i]);
91+
}
92+
93+
return 0;
94+
}

Codeforces/232A_141.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <queue>
4+
#include <string>
5+
#include <list>
6+
#include <set>
7+
#include <map>
8+
#include <sstream>
9+
#include <algorithm>
10+
#include <cstring>
11+
#include <cmath>
12+
#include <ctime>
13+
#include <cstdio>
14+
15+
using namespace std;
16+
17+
int cnt[110];
18+
int sum[110];
19+
int ans[500], s[500], m;
20+
int g[500][500];
21+
int n;
22+
23+
void process (int x) {
24+
int i, j;
25+
m = 0;
26+
for (i = 3; i + 1 <= 100 && x >= sum[i+1]; ++i);
27+
x -= sum[i];
28+
ans[++m] = i;
29+
n = i;
30+
while (x != 0) {
31+
for (i = 3; i + 1 <= 100 && x >= cnt[i + 1]; ++i);
32+
x -= cnt[i];
33+
ans[++m] = i - 1;
34+
n++;
35+
}
36+
}
37+
int main () {
38+
int i, j, k;
39+
for (i = 3; i <= 100; ++i) {
40+
cnt[i] = (i - 1) * (i - 2) / 2;
41+
sum[i] = sum[i - 1] + cnt[i];
42+
}
43+
44+
scanf ("%d", &k);
45+
process (k);
46+
47+
printf ("%d\n", n);
48+
for (i = 1; i <= ans[1]; ++i)
49+
for (j = 1; j <= ans[1]; ++j)
50+
g[i][j] = (i == j ? 0 : 1);
51+
52+
for (i = 2; i <= m; ++i)
53+
for (j = 1; j <= ans[i]; ++j)
54+
g[j][ans[1] + i - 1] = g[ans[1] + i - 1][j] = 1;
55+
56+
for (i = 1; i <= n; ++i) {
57+
for (j = 1; j <= n; ++j)
58+
printf ("%d", g[i][j]);
59+
printf ("\n");
60+
}
61+
return 0;
62+
}

Codeforces/232B_141.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include <iostream>
2+
#include <cstring>
3+
4+
using namespace std;
5+
6+
const int N = 110;
7+
8+
long long C[N][N];
9+
long long d[N][N*N];
10+
long long ex[N][2];
11+
int n;
12+
long long m;
13+
14+
const int md = 1000000007;
15+
16+
17+
long long p (long long x, long long e) {
18+
long long ans = 1;
19+
while (e) {
20+
if (e&1)
21+
ans = (ans * x) % md;
22+
x = (x * x) % md;
23+
e /= 2;
24+
}
25+
return ans;
26+
}
27+
28+
int main () {
29+
int i, j, k, num;
30+
cin >> n >> m >> num;
31+
for (i = 0; i <= n; i++)
32+
d[i][0] = 1;
33+
34+
for (i = 0; i <= n; ++i)
35+
C[i][i] = C[i][0] = 1;
36+
for (i = 2; i <= n; ++i)
37+
for (j = 1; j < i; ++j)
38+
C[i][j] = (C[i-1][j] + C[i-1][j-1]) % md;
39+
40+
for (i = 0; i <= n; ++i) {
41+
ex[i][0] = p (C[n][i], m / n);
42+
ex[i][1] = (ex[i][0] * C[n][i]) % md;
43+
}
44+
45+
d[0][0] = 1;
46+
long long ans = 0;
47+
for (i = 1; i <= n; ++i)
48+
for (j = 1; j <= n * n; ++j)
49+
for (k = 0; k <= n && k <= j; ++k) {
50+
long long e = (i <= m % n ? 1 : 0);
51+
d[i][j] = (d[i][j] + ex[k][e] * d[i - 1][j - k]) % md;
52+
}
53+
54+
cout << d[n][num] << endl;
55+
return 0;
56+
}
57+
58+
59+
60+
61+

Codeforces/Div II/233A_144.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
n = input ();
2+
3+
if n % 2 == 0:
4+
for i in xrange (n / 2):
5+
print 2 * (i+1), 2 *i + 1,
6+
else:
7+
print -1
8+

Codeforces/Div II/233B_144.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import math
2+
3+
n = input ();
4+
5+
def f (x):
6+
cnt = 0;
7+
while x != 0:
8+
cnt += x % 10;
9+
x /= 10;
10+
return cnt
11+
12+
mi = -1;
13+
for sx in xrange (1, 100):
14+
t = int (math.sqrt (4 * n + sx * sx));
15+
if t * t == 4 * n + sx * sx:
16+
tmpAns = (t - sx) / 2;
17+
if f(tmpAns) == sx and (mi == -1 or tmpAns < mi):
18+
mi = tmpAns;
19+
print mi
20+

0 commit comments

Comments
 (0)