Skip to content

Commit 13b7816

Browse files
author
coderxiang
committed
CF348C_202; sqrtDecomp
1 parent 226706e commit 13b7816

File tree

6 files changed

+366
-0
lines changed

6 files changed

+366
-0
lines changed

Codeforces/CF348A_202.hs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Control.Monad
2+
import Data.Int
3+
4+
main = do
5+
n <- readLn :: IO Int64
6+
a <- (map (read :: String->Int64) . words) `liftM` getLine
7+
print $ max (div ((sum a) + (n-2)) (n-1) ) (maximum a)

Codeforces/CF348B_202.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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+
#include <cassert>
15+
16+
using namespace std;
17+
18+
typedef long long ll;
19+
typedef pair<int,int> PII;
20+
typedef vector<int> VI;
21+
typedef vector<string> VS;
22+
#define pb push_back
23+
#define mp make_pair
24+
#define ff first
25+
#define ss second
26+
#define sz(v) (int)v.size()
27+
#define clr(x, v) memset(x, v, sizeof(x))
28+
#define rep(i, l, u) for(int i = (l); i < (u); i++)
29+
#define repv(i, v) for(i = 0; i < (int)v.size(); i++)
30+
#define repi(it, c) for(typeof(c.begin()) it = c.begin(); it != c.end(); ++it)
31+
32+
33+
const int N = 100011;
34+
35+
long long a[N];
36+
int n;
37+
vector<int>G[N];
38+
39+
long long gcd (long long x, long long y) {
40+
return y == 0? x : gcd (y, x%y);
41+
}
42+
43+
void DFS (int u, int pre, long long &lcm, long long &up) {
44+
int i, j, k;
45+
long long lcm_i, up_i;
46+
lcm = 1;
47+
48+
int m = G[u].size();
49+
up = m != 1? 10000000000000000 : a[u];
50+
51+
for (i = 0; i < m; ++i) {
52+
j = G[u][i];
53+
if (j != pre) {
54+
DFS (j, u, lcm_i, up_i);
55+
up = min(up_i, up);
56+
long long t = lcm/gcd(lcm, lcm_i);
57+
if (lcm > 1e13 || lcm_i > 1e13 || t > 1e13/lcm_i) lcm = 1e13 + 1;
58+
else lcm = t * lcm_i;
59+
}
60+
}
61+
62+
if (m > 1) {
63+
if (lcm <= 1e13) lcm *= m - 1;
64+
up *= m - 1;
65+
}
66+
}
67+
68+
int main () {
69+
int i, j, k;
70+
long long s = 0;
71+
cin >> n;
72+
for (i = 1; i <= n; ++i) {
73+
cin >> a[i];
74+
s += a[i];
75+
}
76+
77+
G[1].push_back(0);
78+
for (k = 1; k < n; ++k) {
79+
cin >> i >> j;
80+
G[i].push_back(j);
81+
G[j].push_back(i);
82+
}
83+
84+
long long lcm, up;
85+
DFS (1, 0, lcm, up);
86+
87+
cout << (lcm > up? s : s - (up/lcm) * lcm) << endl;
88+
return 0;
89+
}
90+

Codeforces/CF348C_202.cpp

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
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+
typedef long long ll;
18+
typedef pair<int,int> PII;
19+
typedef vector<int> VI;
20+
typedef vector<string> VS;
21+
#define pb push_back
22+
#define mp make_pair
23+
#define ff first
24+
#define ss second
25+
#define sz(v) (int)v.size()
26+
#define clr(x, v) memset(x, v, sizeof(x))
27+
#define rep(i, l, u) for(int i = (l); i < (u); i++)
28+
#define repv(i, v) for(i = 0; i < (int)v.size(); i++)
29+
#define repi(it, c) for(typeof(c.begin()) it = c.begin(); it != c.end(); ++it)
30+
31+
const int N = 100011;
32+
const int M = 320;
33+
34+
vector<int> HSetList[M], LSetList[N];
35+
bool HSetInd[M][N];
36+
int setSize[N], pos[N];
37+
int common[N][M];
38+
long long a[N], HCnt[M], toH[M];
39+
int ln, hn, n;
40+
41+
int main () {
42+
int m, q, i, j, k;
43+
44+
cin >> n >> m >> q;
45+
for (i = 1; i <= n; ++i)
46+
cin >> a[i];
47+
for (int cnt = 1; cnt <= m; ++cnt) {
48+
cin >> setSize[cnt];
49+
if (setSize[cnt] < M) {
50+
pos[cnt] = ++ln;
51+
for (i = 1; i <= setSize[cnt]; ++i) {
52+
cin >> j;
53+
LSetList[ln].push_back (j);
54+
}
55+
}
56+
else {
57+
pos[cnt] = ++hn;
58+
for (i = 1; i <= setSize[cnt]; ++i) {
59+
cin >> j;
60+
toH[hn] += a[j];
61+
HSetList[hn].push_back(j);
62+
HSetInd[hn][j] = true;
63+
}
64+
}
65+
}
66+
for (int cnt = 1; cnt <= m; ++cnt) {
67+
vector<int> tmp = setSize[cnt] < M? LSetList[pos[cnt]] : HSetList[pos[cnt]];
68+
for (int v : tmp)
69+
for (int h = 1; h <= hn; ++h)
70+
common[cnt][h] += HSetInd[h][v];
71+
}
72+
while (q--) {
73+
char ch;
74+
cin >> ch >> k;
75+
if (ch == '?') {
76+
long long ans = 0;
77+
if (setSize[k] < M) {
78+
for (auto v : LSetList[pos[k]])
79+
ans += a[v];
80+
for (i = 1; i <= hn; ++i)
81+
ans += common[k][i] * HCnt[i];
82+
}
83+
else
84+
ans = toH[pos[k]];
85+
cout << ans << endl;
86+
}
87+
else {
88+
long long t;
89+
cin >> t;
90+
if (setSize[k] < M)
91+
for (auto v : LSetList[pos[k]]) a[v] += t;
92+
else
93+
HCnt[pos[k]] += t;
94+
for (i = 1; i <= hn; ++i)
95+
toH[i] += common[k][i] * t;
96+
}
97+
}
98+
return 0;
99+
}
100+

Codeforces/Div II/CF350A_203.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[n, m] = map (int, raw_input().split());
2+
3+
a = map (int, raw_input().split());
4+
b = map (int, raw_input().split());
5+
6+
tl = max (2 * min(a), max(a));
7+
8+
if tl < min(b):
9+
print tl
10+
else:
11+
print "-1"

Codeforces/Div II/CF350B_203.cpp

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
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+
#include <cassert>
15+
16+
using namespace std;
17+
18+
typedef long long ll;
19+
typedef pair<int,int> PII;
20+
typedef vector<int> VI;
21+
typedef vector<string> VS;
22+
#define pb push_back
23+
#define mp make_pair
24+
#define ff first
25+
#define ss second
26+
#define sz(v) (int)v.size()
27+
#define clr(x, v) memset(x, v, sizeof(x))
28+
#define rep(i, l, u) for(int i = (l); i < (u); i++)
29+
#define repv(i, v) for(i = 0; i < (int)v.size(); i++)
30+
#define repi(it, c) for(typeof(c.begin()) it = c.begin(); it != c.end(); ++it)
31+
32+
33+
const int N = 100011;
34+
int tp[N], dg[N], n;
35+
int p[N], dis[N];
36+
int out[N], from[N];
37+
vector<int> G[N];
38+
39+
void output (int x) {
40+
if (from[x] == 0 || out[from[x]] > 1)
41+
printf("%d", x);
42+
else {
43+
output (from[x]);
44+
printf (" %d", x);
45+
}
46+
}
47+
48+
int DFS (int x) {
49+
if (!from[x] || out[from[x]] > 1)
50+
return dis[x] = 0;
51+
52+
if (dis[x] != -1) return dis[x];
53+
54+
return dis[x] = 1 + DFS (from[x]);
55+
}
56+
57+
int main () {
58+
int i, j, k;
59+
scanf ("%d", &n);
60+
for (i = 1; i <= n; ++i)
61+
scanf ("%d", &tp[i]);
62+
for (i = 1; i <= n; ++i) {
63+
scanf ("%d", &j);
64+
if (j) {
65+
out[j] ++;
66+
from[i] = j;
67+
}
68+
}
69+
70+
memset (dis, -1, sizeof(dis));
71+
72+
int ma = -1, best;
73+
for (i = 1; i <= n; ++i) {
74+
if (tp[i] && (k = DFS (i)) > ma) {
75+
ma = k;
76+
best = i;
77+
}
78+
}
79+
printf ("%d\n", ma + 1);
80+
output (best);
81+
return 0;
82+
}
83+

Codeforces/Div II/CF350C_203.cpp

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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+
#include <cassert>
15+
16+
using namespace std;
17+
18+
typedef long long ll;
19+
typedef pair<int,int> PII;
20+
typedef vector<int> VI;
21+
typedef vector<string> VS;
22+
#define pb push_back
23+
#define mp make_pair
24+
#define ff first
25+
#define ss second
26+
#define sz(v) (int)v.size()
27+
#define clr(x, v) memset(x, v, sizeof(x))
28+
#define rep(i, l, u) for(int i = (l); i < (u); i++)
29+
#define repv(i, v) for(i = 0; i < (int)v.size(); i++)
30+
#define repi(it, c) for(typeof(c.begin()) it = c.begin(); it != c.end(); ++it)
31+
32+
const int N = 100011;
33+
vector<pair<int, int> > a;
34+
int n;
35+
stringstream ss;
36+
int cnt;
37+
38+
bool cmp (const pair<int, int> x, const pair<int, int> y) {
39+
if (abs(x.ff) == abs(y.ff)) return abs(x.ss) < abs(y.ss);
40+
else return abs(x.ff) < abs(y.ff);
41+
}
42+
43+
void printdir (int x, int y, int x1, int y1) {
44+
int dx = abs(x - x1), dy = abs(y - y1);
45+
if (dx) {
46+
ss << "1 " << dx << " " << (x1 >= x? "R\n" : "L\n");
47+
cnt++;
48+
}
49+
if (dy) {
50+
ss << "1 " << dy << " " << (y1 >= y? "U\n" : "D\n");
51+
cnt++;
52+
}
53+
}
54+
55+
int main () {
56+
int i, j, k;
57+
cin >> n;
58+
for (i = 1; i <= n; ++i) {
59+
cin >> j >> k;
60+
a.push_back(mp(j, k));
61+
}
62+
sort (a.begin(), a.end(), cmp);
63+
for (i = 0; i < n; ++i) {
64+
printdir (0, 0, a[i].ff, a[i].ss);
65+
ss << "2\n";
66+
cnt++;
67+
68+
printdir (a[i].ff, a[i].ss, 0, 0);
69+
ss << "3\n";
70+
cnt++;
71+
}
72+
cout << cnt << endl << ss.str();
73+
return 0;
74+
}
75+

0 commit comments

Comments
 (0)