Skip to content

Commit 89779c8

Browse files
committed
Binary Problem
1 parent 26e420f commit 89779c8

File tree

4 files changed

+355
-87
lines changed

4 files changed

+355
-87
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
n = int(input())
2+
a = map(str,raw_input().split(' '))
3+
4+
a[0] = int(a[0])
5+
a[1] = int(a[1])
6+
7+
a1 = a[0]//10
8+
a2 = a[0]%10
9+
b1 = a[1]//10
10+
b2 = a[1]%10
11+
12+
if(a1 == 7 or a2 == 7 or b1 == 7 or b2 == 7 ):
13+
print "0"
14+
else:
15+
count = 0
16+
while(not(a1 == 7 or a2 == 7 or b1 == 7 or b2 == 7)):
17+
a[1]-=n
18+
count+=1
19+
#print(count)
20+
if(a[1]<0):
21+
a[1]+=60
22+
a[0]-=1
23+
if(a[0]<0):
24+
a[0]+=24
25+
a1 = a[0]//10
26+
a2 = a[0]%10
27+
b1 = a[1]//10
28+
b2 = a[1]%10
29+
continue
30+
#print(count,str(a[0])+str(a[1]))
31+
print(count)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from collections import deque
2+
n, k = map(int, raw_input().split())
3+
a = [i for i in xrange(64) if n >> i & 1]
4+
if k < len(a):
5+
print 'No'
6+
quit()
7+
s = a[-1]
8+
c = 0
9+
while len(a) + c < k:
10+
if a and s == a[-1]:
11+
c += 1
12+
a.pop()
13+
c = c * 2
14+
s -= 1
15+
t = len(a) + c - k
16+
a.reverse()
17+
b = 0
18+
if t:
19+
while t:
20+
c -= 2
21+
t -= 1
22+
b += 1
23+
if not a:
24+
c -= 1
25+
a.append(s)
26+
while c > 1:
27+
c -= 2
28+
b += 1
29+
a.extend([a.pop() - 1] * 2)
30+
a = [s + 1] * b + [s] * c + a
31+
print 'Yes'
32+
for x in a:
33+
print x,

CP/JanuaryCookOff2018/prob3.cpp

Lines changed: 79 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,83 @@
11
#include <bits/stdc++.h>
2-
32
using namespace std;
4-
5-
const int oo = 1000000000;
6-
7-
const int N = 100005;
8-
9-
int a[N], val[N][2], f[N][2], g[N][2];
10-
11-
void solve() {
12-
int n;
13-
scanf("%d", &n);
14-
15-
for (int i = 1; i <= n; i++) {
16-
scanf("%d", a+i);
17-
}
18-
19-
if (n == 1) {
20-
printf("0\n");
21-
return;
22-
}
23-
24-
for (int i = 1; i <= n; i++) {
25-
val[i][0] = a[i];
26-
val[i][1] = a[n+1-i];
27-
}
28-
29-
int m = n/2;
30-
for (int i = 1; i <= m; i++)
31-
for (int k = 0; k < 2; k++)
32-
f[i][k] = g[i][k] = oo;
33-
f[1][0] = g[1][0] = 0;
34-
f[1][1] = g[1][1] = 1;
35-
for (int i = 1; i < m; i++) {
36-
for (int j = 0; j < 2; j++) {
37-
for (int k = 0; k < 2; k++) {
38-
int c1 = val[i][j];
39-
int c2 = val[i+1][k];
40-
if (((i & 1) && (c1 <= c2)) || (((i & 1) == 0) && c1 >= c2)) continue;
41-
int t = n+1-i;
42-
c1 = val[t][j];
43-
c2 = val[t-1][k];
44-
if (((t & 1) && (c1 <= c2)) || (((t & 1) == 0) && c1 >= c2)) continue;
45-
f[i+1][k] = min(f[i+1][k], f[i][j] + k);
46-
}
47-
for (int k = 0; k < 2; k++) {
48-
int c1 = val[i][j];
49-
int c2 = val[i+1][k];
50-
if (((i & 1) && (c1 >= c2)) || (((i & 1) == 0) && c1 <= c2)) continue;
51-
int t = n+1-i;
52-
c1 = val[t][j];
53-
c2 = val[t-1][k];
54-
if (((t & 1) && (c1 >= c2)) || (((t & 1) == 0) && c1 <= c2)) continue;
55-
g[i+1][k] = min(g[i+1][k], g[i][j] + k);
56-
}
57-
}
58-
}
59-
60-
int ans = oo;
61-
62-
if (n % 2 == 0) {
63-
for (int j = 0; j < 2; j++) {
64-
int c1 = val[m][j];
65-
int c2 = val[m+1][j];
66-
if (((m&1) && (c1 > c2)) || ((m&1) == 0 && (c1 < c2)))
67-
ans = min(ans, f[m][j]);
68-
if (((m&1) && (c1 < c2)) || ((m&1) == 0 && (c1 > c2)))
69-
ans = min(ans, g[m][j]);
70-
}
71-
}
72-
else {
73-
int c1 = a[m];
74-
int c2 = a[m+2];
75-
int b = a[m+1];
76-
if ((((m+1)&1) && b > c1 && b > c2) || (((m+1)&1) == 0 && b < c1 && b < c2))
77-
ans = min(ans, min(f[m][0], f[m][1]));
78-
if ((((m+1)&1) && b < c1 && b < c2) || (((m+1)&1) == 0 && b > c1 && b > c2))
79-
ans = min(ans, min(g[m][0], g[m][1]));
80-
}
81-
82-
if (ans >= oo) ans = -1;
83-
printf("%d\n", ans);
3+
int A[100009];
4+
int D1[100009];
5+
int D2[100009];
6+
bool ok(int i)
7+
{
8+
if (i % 2 == 1)
9+
return A[i] < A[i + 1];
10+
else
11+
return A[i] > A[i + 1];
8412
}
85-
86-
int main() {
87-
int ct;
88-
scanf("%d", &ct);
89-
90-
while (ct--) solve();
13+
int N;
14+
int ans()
15+
{
16+
int i = (N + 1) / 2;
17+
int j = (N + 2) / 2;
18+
int id = 0;
19+
D1[id] = N + 2;
20+
D2[id] = N + 2;
21+
if (i == j)
22+
{
23+
D1[id] = 0;
24+
D2[id] = 0;
25+
}
26+
else
27+
{
28+
if (ok(i))
29+
D1[id] = 0;
30+
swap(A[i], A[j]);
31+
if (ok(i))
32+
D2[id] = 1;
33+
swap(A[i], A[j]);
34+
}
35+
while (true)
36+
{
37+
i--;
38+
j++;
39+
if (i < 1)
40+
break;
41+
id++;
42+
D1[id] = N + 2;
43+
D2[id] = N + 2;
44+
{
45+
if (ok(i) && ok(j - 1))
46+
D1[id] = min(D1[id], D1[id - 1]);
47+
swap(A[i + 1], A[j - 1]);
48+
if (ok(i) && ok(j - 1))
49+
D1[id] = min(D1[id], D2[id - 1]);
50+
swap(A[i + 1], A[j - 1]);
51+
}
52+
swap(A[i], A[j]);
53+
{
54+
if (ok(i) && ok(j - 1))
55+
D2[id] = min(D2[id], 1 + D1[id - 1]);
56+
swap(A[i + 1], A[j - 1]);
57+
if (ok(i) && ok(j - 1))
58+
D2[id] = min(D2[id], 1 + D2[id - 1]);
59+
swap(A[i + 1], A[j - 1]);
60+
}
61+
swap(A[i], A[j]);
62+
}
63+
return min(D1[id], D2[id]);
64+
}
65+
int main()
66+
{
67+
int T;
68+
cin >> T;
69+
while (T--)
70+
{
71+
cin >> N;
72+
for (int i = 1; i <= N; i++)
73+
cin >> A[i];
74+
int out = N + 2;
75+
out = min(out, ans());
76+
for (int i = 1; i <= N; i++)
77+
A[i] *= -1;
78+
out = min(out, ans());
79+
if (out > N)
80+
out = -1;
81+
cout << out << '\n';
82+
}
9183
}

0 commit comments

Comments
 (0)