Skip to content

Commit 99dfd15

Browse files
Add files via upload
1 parent 295e694 commit 99dfd15

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
If there is even one 0 in the array, we can make all non-0 elements = 0 in 1 move each.
2+
3+
If there is at least one pair of equal elements, we can create a 0 in 1 move and make the other elements 0 in (n - 1) moves.
4+
5+
Otherwise, we will two elements, make them equal in one move and then use n moves from the case above.
6+
Total = (n + 1) moves here.
7+
8+
-----
9+
10+
void solve()
11+
{
12+
int no_of_elements;
13+
cin >> no_of_elements;
14+
15+
vector <int> A(no_of_elements + 1);
16+
for(int i = 1; i <= no_of_elements; i++)
17+
{
18+
cin >> A[i];
19+
}
20+
21+
sort(all(A));
22+
int non_zero = 0, equal_pairs = 0;
23+
for(int i = 1; i <= no_of_elements; i++)
24+
{
25+
if(A[i] > 0)
26+
{
27+
non_zero++;
28+
}
29+
30+
if(i < no_of_elements && A[i] == A[i + 1])
31+
{
32+
equal_pairs++;
33+
}
34+
}
35+
36+
int answer = 0;
37+
if(non_zero < no_of_elements)
38+
{
39+
answer = non_zero;
40+
}
41+
else if(equal_pairs > 0)
42+
{
43+
answer = no_of_elements;
44+
}
45+
else
46+
{
47+
answer = no_of_elements + 1;
48+
}
49+
50+
cout << answer << "\n";
51+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
Keep track of the length of the current segment. If the segment size is odd, then flip the border element.
2+
3+
-----
4+
5+
void solve()
6+
{
7+
int no_of_elements;
8+
cin >> no_of_elements;
9+
10+
string S;
11+
cin >> S;
12+
13+
int minimum_changes = 0;
14+
int current_segment = 1;
15+
for(int i = 1; i < S.size(); i++)
16+
{
17+
if(S[i] != S[i - 1])
18+
{
19+
if(current_segment%2 == 1)
20+
{
21+
S[i] = flip(S[i]);
22+
minimum_changes++;
23+
current_segment = 2;
24+
}
25+
else
26+
{
27+
current_segment = 1;
28+
}
29+
}
30+
else
31+
{
32+
current_segment++;
33+
}
34+
}
35+
36+
cout << minimum_changes << "\n";
37+
}

0 commit comments

Comments
 (0)