Skip to content

Commit fac9a6c

Browse files
committed
updated
1 parent 98f94c1 commit fac9a6c

File tree

10 files changed

+499
-0
lines changed

10 files changed

+499
-0
lines changed

Codeforces/20C.cpp

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <cstring>
4+
#include <queue>
5+
6+
using namespace std;
7+
8+
const int N = 100011;
9+
const int M = 300011;
10+
const long long INF = 100000011111LL;
11+
12+
int to[M], nxt[M], w[M];
13+
long long dis[N];
14+
int eb[N], pa[N], en, n;
15+
16+
void adde (int x, int y, int c) {
17+
to[en] = y; w[en] = c; nxt[en] = eb[x]; eb[x] = en++;
18+
to[en] = x; w[en] = c; nxt[en] = eb[y]; eb[y] = en++;
19+
}
20+
21+
void init () {
22+
memset (eb, -1, sizeof (eb));
23+
en = 0;
24+
}
25+
26+
long long Dijkstra (int src, int des) {
27+
int i, j, k;
28+
priority_queue< pair<long long,int> > pq;
29+
bool out[N] = {false};
30+
int outN = 0;
31+
32+
for (i = 1; i <= n; ++i)
33+
dis[i] = INF;
34+
dis[src] = 0;
35+
pq.push (make_pair (0, src));
36+
37+
while (!pq.empty()) {
38+
i = pq.top().second;
39+
pq.pop ();
40+
if (out[i]) continue;
41+
else if ( (++outN) == n) break;
42+
out[i] = true;
43+
44+
for (int e = eb[i]; e != -1; e = nxt[e]) {
45+
j = to[e];
46+
if (dis[i] + w[e] < dis[j]) {
47+
dis[j] = dis[i] + w[e];
48+
pa[j] = i;
49+
pq.push (make_pair (-dis[j], j));
50+
}
51+
}
52+
}
53+
return dis[des] == INF ? -1 : dis[des];
54+
}
55+
56+
void output (int x) {
57+
if (x == 1)
58+
printf ("1");
59+
else {
60+
output (pa[x]);
61+
printf (" %d", x);
62+
}
63+
}
64+
65+
int main () {
66+
int i, j, k, m;
67+
68+
// freopen ("in", "r", stdin);
69+
70+
init ();
71+
scanf ("%d%d", &n, &m);
72+
for (; m; --m) {
73+
scanf ("%d%d%d", &i, &j, &k);
74+
adde (i, j, k);
75+
}
76+
if (Dijkstra (1, n) == -1)
77+
printf ("-1");
78+
else
79+
output (n);
80+
printf ("\n");
81+
return 0;
82+
}

Codeforces/21C_21.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <iostream>
4+
#include <map>
5+
6+
using namespace std;
7+
8+
const int N = 100011;
9+
10+
int s[N];
11+
map<int,int>M;
12+
int main () {
13+
int i, j, k, n;
14+
cin >> n;
15+
for (i = 1; i <= n; ++i) {
16+
cin >> s[i];
17+
s[i] += s[i - 1];
18+
M[s[i]] ++;
19+
}
20+
long long ans = 0;
21+
if (s[n] % 3 != 0) {
22+
cout << "0" << endl;
23+
return 0;
24+
}
25+
26+
int amt = s[n] / 3;
27+
for (j = n; j >= 3; --j) {
28+
M[s[j]] --;
29+
if (s[n] - s[j - 1] != amt) continue;
30+
ans += M[amt];
31+
if (s[j - 1] == amt)
32+
ans --;
33+
}
34+
cout << ans << endl;
35+
return 0;
36+
}

Codeforces/241A_bayan.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include <cstdio>
2+
#include <iostream>
3+
#include <cstring>
4+
#include <string>
5+
#include <vector>
6+
#include <map>
7+
#include <set>
8+
#include <algorithm>
9+
#include <queue>
10+
11+
using namespace std;
12+
13+
const int N = 1011;
14+
15+
int main () {
16+
int i, j, k;
17+
int n, m;
18+
int d[N], s[N];
19+
20+
//freopen ("in", "r", stdin);
21+
22+
scanf ("%d%d", &n, &m);
23+
for (i = 2; i <= n + 1; ++i)
24+
scanf ("%d", &d[i]);
25+
for (i = 1; i <= n; ++i)
26+
scanf ("%d", &s[i]);
27+
28+
int ma = s[1];
29+
int curH = 0, L = s[1];
30+
for (i = 2; i <= n + 1; ++i) {
31+
if (L < d[i]) {
32+
while (d[i] > L) {
33+
L += ma;
34+
curH += m;
35+
}
36+
}
37+
L += s[i] - d[i];
38+
curH += d[i];
39+
//printf ("%d %d %d\n", i, curH, L);
40+
ma = max (ma, s[i]);
41+
}
42+
printf ("%d\n", curH);
43+
return 0;
44+
}
45+

Codeforces/241G_bayan.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#include <cstdio>
2+
#include <string>
3+
#include <vector>
4+
#include <map>
5+
#include <set>
6+
#include <cmath>
7+
#include <algorithm>
8+
#include <queue>
9+
10+
using namespace std;
11+
12+
int main () {
13+
int n = 400;
14+
int metaN = 400;
15+
int ma = 600;
16+
int i, j, k;
17+
18+
printf ("%d\n", n + 2);
19+
printf ("%d %d\n", 0, ma * ma);
20+
for (i = metaN, j = 0, k = ma * ma; i >= 1; --i) {
21+
j += ceil (2 * sqrt (k * (double)i)) + 1;
22+
printf ("%d %d\n", j, i);
23+
k = i;
24+
}
25+
printf ("%d %d\n", j + 2 * ma + 1, (ma + 1) * (ma + 1));
26+
return 0;
27+
}
28+
29+
30+
31+

Codeforces/Div II/22A_22.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
n = input ();
2+
v = map (int, raw_input().split());
3+
v.sort ();
4+
if v[n - 1] == v[0]:
5+
print 'NO'
6+
else:
7+
i = 1;
8+
while v[i] == v[i-1]:
9+
i += 1;
10+
print v[i];

Codeforces/Div II/22D.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
n = input ();
2+
3+
v = [(0, 0)] * n;
4+
ans = [0] * n;
5+
for i in xrange (n):
6+
[a, b] = map (int, raw_input (). split());
7+
if a > b:
8+
a, b = b, a;
9+
v[i] = (a, b);
10+
11+
v.sort ();
12+
13+
cx = v[0][0]; cy = v[0][1];
14+
15+
16+
cnt = 0;
17+
for i in xrange (1, n):
18+
wx, wy = v[i][0], v[i][1];
19+
if wx > cy:
20+
ans[cnt] = cy;
21+
cnt += 1
22+
cx, cy = wx, wy;
23+
24+
else:
25+
cx, cy = wx, min (cy, wy);
26+
27+
ans[cnt] = cy;
28+
cnt += 1;
29+
print cnt;
30+
print ' '.join (map (str, ans[:cnt]));
31+
32+
33+
34+

Codeforces/Div II/237A_147.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <vector>
4+
5+
using namespace std;
6+
7+
8+
const int N = 100010;
9+
10+
vector <pair<int,int> > a;
11+
int n;
12+
13+
int main () {
14+
int i, j, k;
15+
int ans = 1;
16+
17+
//freopen ("in", "r", stdin);
18+
scanf ("%d", &n);
19+
for (i = 0; i < n; ++i) {
20+
scanf ("%d%d", &j, &k);
21+
a.push_back (make_pair (j, k));
22+
}
23+
sort (a.begin(), a.end());
24+
for (i = 0; i < n; i++) {
25+
int tmp = 1;
26+
while (i + 1 < n && a[i] == a[i + 1]) {
27+
tmp ++;
28+
i++;
29+
}
30+
ans = max (ans, tmp);
31+
}
32+
33+
printf ("%d\n", ans);
34+
return 0;
35+
}

Codeforces/Div II/237B_147.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <vector>
4+
5+
using namespace std;
6+
7+
const int N = 100;
8+
9+
int a[N][N];
10+
int c[N];
11+
vector <pair<int,int> > pos;
12+
int n;
13+
14+
int main () {
15+
int i, j, k;
16+
17+
// freopen ("in", "r", stdin);
18+
19+
scanf ("%d", &n);
20+
k = 0;
21+
for (i = 1; i <= n; ++i) {
22+
scanf ("%d", &c[i]);
23+
k += c[i];
24+
}
25+
26+
pos.resize (k + 1);
27+
for (i = 1; i <= n; ++i)
28+
for (j = 1; j <= c[i]; ++j) {
29+
scanf ("%d", &a[i][j]);
30+
pos[a[i][j]] = pair<int,int> (i, j);
31+
}
32+
33+
int cnt = 0;
34+
vector <vector <int> > ans;
35+
for (i = 1; i <= n; ++i)
36+
for (j = 1; j <= c[i]; ++j) {
37+
cnt ++;
38+
if (pos[a[i][j]] != pos[cnt]) {
39+
int xx = pos[cnt].first, yy = pos[cnt].second;
40+
int arr [4] = {i, j, xx, yy};
41+
swap (a[i][j], a[xx][yy]);
42+
pos[a[i][j]] = pair<int,int> (i, j);
43+
pos[a[xx][yy]] = pair<int,int> (xx, yy);
44+
45+
vector <int> b (arr, arr + 4);
46+
ans.push_back (b);
47+
}
48+
}
49+
50+
cnt = ans.size ();
51+
printf ("%d\n", cnt);
52+
for (i = 0; i < cnt; ++i)
53+
for (j = 0; j < 4; ++j)
54+
printf ("%d%c", ans[i][j], j == 3 ? '\n' : ' ');
55+
56+
return 0;
57+
}
58+
59+

Codeforces/Div II/237C_147.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <vector>
4+
5+
using namespace std;
6+
7+
const int N = 1000010;
8+
9+
int cnt[N];
10+
int a, b, n;
11+
12+
void genPrime () {
13+
for (int i = 2; i < N; ++i)
14+
cnt[i] = 1;
15+
for (int i = 2; i <= 1000; ++i)
16+
if (cnt[i])
17+
for (int j = i * i; j < N; cnt[j] = 0, j += i);
18+
for (int i = 1; i < N; ++i)
19+
cnt[i] += cnt[i - 1];
20+
}
21+
22+
bool chk (int x) {
23+
// printf ("checking %d %d\n", x, n);
24+
for (int i = a; i + x - 1 <= b; ++i) {
25+
int j = i + x - 1;
26+
// printf ("%d %d %d %d\n", j, i, cnt[j], cnt[i - 1]);
27+
if (cnt[j] - cnt[i - 1] < n) return false;
28+
}
29+
return true;
30+
}
31+
32+
33+
int main () {
34+
int i, j, k;
35+
36+
genPrime ();
37+
38+
//freopen ("in", "r", stdin);
39+
scanf ("%d%d%d", &a, &b, &n);
40+
if (cnt[b] - cnt[a - 1] < n) {
41+
printf ("-1\n");
42+
return 0;
43+
}
44+
45+
// printf ("%d\n", cnt[b] - cnt[a - 1]);
46+
47+
int low = 1, up = b - a + 1;
48+
while (up > low) {
49+
int mid = (up + low) / 2;
50+
if (chk (mid))
51+
up = mid;
52+
else
53+
low = mid + 1;
54+
}
55+
printf ("%d\n", up);
56+
return 0;
57+
}

0 commit comments

Comments
 (0)