Skip to content

Commit 914cc85

Browse files
committed
177 complete
1 parent d64277b commit 914cc85

File tree

9 files changed

+319
-89
lines changed

9 files changed

+319
-89
lines changed

Codeforces/175C.cpp

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,54 @@
1-
#include <cstdio>
2-
#include <algorithm>
3-
#include <iostream>
4-
#include <vector>
5-
#include <cstring>
6-
7-
using namespace std;
8-
9-
vector <pair<long long, long long> > a;
10-
long long p[110];
11-
int pn;
12-
int main () {
13-
int i, j, k, n;
14-
cin >> n;
15-
for (i = 1; i <= n; i++) {
16-
long long kk, jj;
17-
cin >> kk >> jj;
18-
a.push_back({jj,kk});
19-
}
20-
a.push_back({0,0});
21-
sort (a.begin(), a.end());
22-
cin >> pn;
23-
for (i = 1; i <= pn; i++)
24-
cin >> p[i];
25-
p[++pn] = 10000000000000LL;
26-
long long ans = 0;
27-
long long f = 1; j = 1; i = 0;
28-
long long sum = 0, left = 0;
29-
while (j <= pn) {
30-
if (sum + left <= p[j]) {
31-
sum += left;
32-
ans += left * a[i].first * f;
33-
i++;
34-
while (i <= n && sum + a[i].second <= p[j]) {
35-
sum += a[i].second;
36-
ans += a[i].second * a[i].first * f;
37-
i++;
38-
}
39-
if (i > n) break;
40-
left = a[i].second - (p[j] - sum);
41-
ans += (p[j] - sum) * a[i].first * f;
42-
sum = p[j];
43-
}
44-
else {
45-
left -= p[j] - sum;
46-
ans += (p[j] - sum) * a[i].first * f;
47-
sum = p[j];
48-
}
49-
j++; f++;
50-
}
51-
cout << ans << endl;
52-
return 0;
53-
54-
}
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <iostream>
4+
#include <vector>
5+
#include <cstring>
6+
7+
using namespace std;
8+
9+
vector <pair<long long, long long> > a;
10+
long long p[110];
11+
int pn;
12+
int main () {
13+
int i, j, k, n;
14+
cin >> n;
15+
for (i = 1; i <= n; i++) {
16+
long long kk, jj;
17+
cin >> kk >> jj;
18+
a.push_back({jj,kk});
19+
}
20+
a.push_back({0,0});
21+
sort (a.begin(), a.end());
22+
cin >> pn;
23+
for (i = 1; i <= pn; i++)
24+
cin >> p[i];
25+
p[++pn] = 10000000000000LL;
26+
long long ans = 0;
27+
long long f = 1; j = 1; i = 0;
28+
long long sum = 0, left = 0;
29+
while (j <= pn) {
30+
if (sum + left <= p[j]) {
31+
sum += left;
32+
ans += left * a[i].first * f;
33+
i++;
34+
while (i <= n && sum + a[i].second <= p[j]) {
35+
sum += a[i].second;
36+
ans += a[i].second * a[i].first * f;
37+
i++;
38+
}
39+
if (i > n) break;
40+
left = a[i].second - (p[j] - sum);
41+
ans += (p[j] - sum) * a[i].first * f;
42+
sum = p[j];
43+
}
44+
else {
45+
left -= p[j] - sum;
46+
ans += (p[j] - sum) * a[i].first * f;
47+
sum = p[j];
48+
}
49+
j++; f++;
50+
}
51+
cout << ans << endl;
52+
return 0;
53+
54+
}

Codeforces/220C_136.cpp

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
1-
#include <iostream>
2-
#include <set>
3-
#include <algorithm>
4-
#include <cstdio>
5-
6-
using namespace std;
7-
8-
const int N = 100010;
9-
int b[N], p[N], n;
10-
11-
multiset < int > S;
12-
int main () {
13-
int i, j, k;
14-
scanf ("%d", &n);
15-
for (i = 1; i <= n; i++) {
16-
scanf ("%d", &k);
17-
p[k] = i;
18-
}
19-
S.insert (- 100010); S.insert (100010);
20-
for (i = 1; i <= n; ++i) {
21-
scanf ("%d", &b[i]);
22-
S.insert (i - p[b[i]]);
23-
}
24-
for (i = 0; i < n; ++i) {
25-
multiset <int>::iterator it = S.lower_bound (i);
26-
int ans = 100010;
27-
ans = min (ans, *it - i); ans = min (ans, i - (* (-- it)));
28-
printf ("%d\n", ans);
29-
S.erase (S.find (i + 1 - p[b[i+1]] ));
30-
S.insert (n - p[b[i+1]] + i + 1);
31-
}
32-
return 0;
33-
}
34-
1+
#include <iostream>
2+
#include <set>
3+
#include <algorithm>
4+
#include <cstdio>
5+
6+
using namespace std;
7+
8+
const int N = 100010;
9+
int b[N], p[N], n;
10+
11+
multiset < int > S;
12+
int main () {
13+
int i, j, k;
14+
scanf ("%d", &n);
15+
for (i = 1; i <= n; i++) {
16+
scanf ("%d", &k);
17+
p[k] = i;
18+
}
19+
S.insert (- 100010); S.insert (100010);
20+
for (i = 1; i <= n; ++i) {
21+
scanf ("%d", &b[i]);
22+
S.insert (i - p[b[i]]);
23+
}
24+
for (i = 0; i < n; ++i) {
25+
multiset <int>::iterator it = S.lower_bound (i);
26+
int ans = 100010;
27+
ans = min (ans, *it - i); ans = min (ans, i - (* (-- it)));
28+
printf ("%d\n", ans);
29+
S.erase (S.find (i + 1 - p[b[i+1]] ));
30+
S.insert (n - p[b[i+1]] + i + 1);
31+
}
32+
return 0;
33+
}
34+

Codeforces/258E_157.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// trick 1: Offline calculation in DFS order
2+
// trick 2: No label push-down
3+
14
#include <cstdio>
25
#include <algorithm>
36
#include <vector>
@@ -100,4 +103,4 @@ int main () {
100103
for (i = 1; i <= n; ++i)
101104
printf ("%d%c", ans[i]? ans[i] - 1 : 0, i == n ? '\n' : ' ');
102105
return 0;
103-
}
106+
}

Codeforces/286A_176.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
n = gets.to_i;
2+
3+
if n % 4 > 1
4+
puts "-1"
5+
else
6+
a = Array.new(n);
7+
(1..(n/4)).each{|i|
8+
j = (i-1)*2 + 1;
9+
a[j-1] = j+1;
10+
a[j] = n - j + 1;
11+
a[n-j] = n - j;
12+
a[n-j-1] = j;
13+
}
14+
a[n/2] = n/2+1 if n % 4 ==1
15+
puts a.join(' ');
16+
end

Codeforces/288A_177.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
n, m = gets.split.map(& :to_i)
2+
3+
if m == 1 && n != 1 || m > n
4+
ans = "-1"
5+
elsif m == 1
6+
ans = "a"
7+
else
8+
L = n - (m - 2);
9+
ans = "ab" * (L/2);
10+
if L % 2 == 1
11+
ans += "a"
12+
end
13+
ans += ('c'..(m + 96).chr).to_a.join('');
14+
end
15+
puts ans

Codeforces/288B_177.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
$md = 1000000007;
2+
def pow(x, y)
3+
if y == 0
4+
1
5+
else
6+
t = pow(x, y/2);
7+
t = (t * t) % $md;
8+
if y % 2 == 1 then (x * t) % $md else t end
9+
end
10+
end
11+
12+
n, k = gets.split.map(& :to_i)
13+
p pow(k, k - 1) * pow(n - k, n - k) % $md
14+

Codeforces/288C_177.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
def f n
2+
cur = 1
3+
while cur <= n
4+
cur = cur * 2
5+
end
6+
cur /= 2
7+
i = cur
8+
cur -= 1
9+
while i <= n && cur >= 0
10+
$a[cur] = i
11+
$a[i] = cur
12+
$ans += 2 * (cur ^ i)
13+
i += 1
14+
cur -= 1
15+
end
16+
if cur >= 1
17+
f cur
18+
end
19+
end
20+
21+
n = gets.to_i
22+
$ans = 0
23+
$a = Array.new(n + 1, 0)
24+
f n
25+
p $ans
26+
puts $a.join(' ')

Codeforces/288D_177.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
#include <cstring>
4+
#include <vector>
5+
#include <iostream>
6+
7+
using namespace std;
8+
9+
const int N = 80011;
10+
11+
vector<int> tr[N];
12+
unsigned long long ans;
13+
int cap[N];
14+
int n;
15+
16+
void DFS (int u, int pre) {
17+
int i, j, k;
18+
cap[u] = 1;
19+
unsigned long long tmp = 0;
20+
for (i = 0; i < tr[u].size(); ++i) {
21+
if ((j = tr[u][i]) != pre) {
22+
DFS (j, u);
23+
tmp += (unsigned long long) cap[j] * cap[u];
24+
cap[u] += cap[j];
25+
}
26+
}
27+
ans -= tmp * (tmp + 2 * (unsigned long long) cap[u] * (n - cap[u]));
28+
}
29+
30+
int main () {
31+
int i, j, k;
32+
cin >> n;
33+
ans = (unsigned long long) n * (n - 1) / 2;
34+
ans *= ans;
35+
for (k = n - 1; k; --k) {
36+
cin >> i >> j;
37+
tr[i].push_back (j);
38+
tr[j].push_back (i);
39+
}
40+
DFS (1, 0);
41+
cout << ans << endl;
42+
return 0;
43+
}
44+

0 commit comments

Comments
 (0)