1. 程式人生 > 其它 >2021/07/14/D CodeForces - 1479B1

2021/07/14/D CodeForces - 1479B1

已AC

題目大意對塗色一行黑白,下標集合為色彩對應的集合,輸出最大的不連續重複的集合大小之和

思路參考集訓隊隊內大佬思路:

WA合集:

 1 #pragma warning (disable:4996)
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<stdio.h>
 5 #include<math.h>
 6 #include<string.h>
 7 #include<string>
 8 #include<queue>
 9 #include<vector>
10
#define MAX1 100005 /*1e5 + 5*/ 11 #define MAX2 1000000005 /*le9 + 5*/ 12 #define MAX3 200005 /*2e5 + 5*/ 13 #define MAX4 5005 /*5e3 + 5*/ 14 #define MAX5 1005 /*1e3 + 5*/ 15 #define MAX6 10005 /*1e4 + 5*/ 16 #define T1 27 17 #define T2 25 18 #define T3 18 19 #define MOL 9223372036854775807 20
using namespace std; 21 typedef long long int ll; 22 //memset(sm, 0, sizeof(sm)); 23 int main() { 24 ll n, m, t; 25 ll i, j, k; 26 while (scanf("%lld", &t) != EOF) { 27 ll last = 0; 28 ll cntl = 0; 29 ll cnt = 0; 30 while (t--) { 31 scanf("%lld", &n);
32 if (n != last)cntl = 0; 33 else cntl++; 34 if (cntl < 2) 35 cnt++; 36 //cout << n << cntl << endl; 37 last = n; 38 } 39 cout << cnt << endl; 40 } 41 return 0; 42 }
自寫 最初WA 未考慮隔位的重複
 1 #pragma warning (disable:4996)
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<stdio.h>
 5 #include<math.h>
 6 #include<string.h>
 7 #include<string>
 8 #include<queue>
 9 #include<vector>
10 #define MAX1 100005            /*1e5 + 5*/
11 #define MAX2 1000000005        /*le9 + 5*/
12 #define MAX3 200005            /*2e5 + 5*/
13 #define MAX4 5005            /*5e3 + 5*/
14 #define MAX5 1005            /*1e3 + 5*/
15 #define MAX6 10005            /*1e4 + 5*/
16 #define T1 27
17 #define T2 25
18 #define T3 18
19 #define MOL 9223372036854775807
20 using namespace std;
21 typedef long long int ll;
22 //memset(sm, 0, sizeof(sm));
23 int main() {
24     ll n, m, t;
25     ll i, j, k;
26     while (scanf("%lld", &t) != EOF) {
27         ll cnt1 = 0;
28         ll cnt2 = 0;
29         ll cnt = 0;
30         while (t--) {
31             bool f = true;
32             scanf("%lld", &n);
33             if (n != cnt1) {
34                 cnt1 = n;
35             }
36             else if (n != cnt2) {
37                 cnt2 = n;
38             }
39             else {
40                 f = false;
41             }
42             if (f) {
43                 cnt++;
44             }
45         }
46         cout << cnt << endl;
47     }
48     return 0;
49 }
自寫 第二次WA 試圖模擬情景 仍未考慮隔位重複
 1 #pragma warning (disable:4996)
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<stdio.h>
 5 #include<math.h>
 6 #include<string.h>
 7 #include<string>
 8 #include<queue>
 9 #include<vector>
10 #define MAX1 100005            /*1e5 + 5*/
11 #define MAX2 1000000005        /*le9 + 5*/
12 #define MAX3 200005            /*2e5 + 5*/
13 #define MAX4 5005            /*5e3 + 5*/
14 #define MAX5 1005            /*1e3 + 5*/
15 #define MAX6 10005            /*1e4 + 5*/
16 #define T1 27
17 #define T2 25
18 #define T3 18
19 #define MOL 9223372036854775807
20 using namespace std;
21 typedef long long int ll;
22 //memset(sm, 0, sizeof(sm));
23 int main() {
24     ll n, m, t;
25     ll i, j, k;
26     while (scanf("%lld", &t) != EOF) {
27         ll a1 = 0, a2 = 0;
28         ll b = 0;
29         ll cnt = 0;
30         while (t--) {
31             scanf("%lld", &n);
32             if (a1 && a2 && b != a1 && b != a2) {
33                 if (n == a1) {
34                     a1 = b; cnt++;
35                 }
36                 else if (n == a2) {
37                     a2 = b; cnt++;
38                 }
39             }
40             else if (a1 == 0 || b != a1) {
41                 a1 = b; cnt++;
42             }
43             else if (a2 == 0 || b != a2) {
44                 a2 = b; cnt++;
45             }
46         }
47         cout << cnt << endl;
48     }
49     return 0;
50 }
賽後看思路但WA 發現少了一點:滿足大佬思路1 2 時只需滿足前兩個字句就能增加數目
 1 #pragma warning (disable:4996)
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<stdio.h>
 5 #include<math.h>
 6 #include<string.h>
 7 #include<string>
 8 #include<queue>
 9 #include<vector>
10 #define MAX1 100005            /*1e5 + 5*/
11 #define MAX2 1000000005        /*le9 + 5*/
12 #define MAX3 200005            /*2e5 + 5*/
13 #define MAX4 5005            /*5e3 + 5*/
14 #define MAX5 1005            /*1e3 + 5*/
15 #define MAX6 10005            /*1e4 + 5*/
16 #define T1 27
17 #define T2 25
18 #define T3 18
19 #define MOL 9223372036854775807
20 using namespace std;
21 typedef long long int ll;
22 //memset(sm, 0, sizeof(sm));
23 int main() {
24     ll n, m, t;
25     ll i, j, k;
26     while (scanf("%lld", &t) != EOF) {
27         ll a1 = 0, a2 = 0;
28         ll b = 0;
29         ll cnt = 0;
30         t++;
31         n = 0;
32         while (t--) {
33             if(t)scanf("%lld", &n);
34             if (a1 && a2 && b != a1 && b != a2) {
35                 if (n == a1) {
36                     a1 = b; cnt++;
37                 }
38                 else if (n == a2) {
39                     a2 = b; cnt++;
40                 }
41                 else {
42                     a1 = b; cnt++;
43                 }
44             }
45             else if (a1 == 0 || b != a1) {
46                 a1 = b; cnt++;
47             }
48             else if (a2 == 0 || b != a2) {
49                 a2 = b; cnt++;
50             }
51             b = n;
52             n = 0;
53         }
54         cout << cnt << endl;
55     }
56     return 0;
57 }
賽後看思路但WA 發現我這種寫法從第二次輸入開始計數,因此cnt初始值應為-1

AC程式碼:(堅定不用棧)

 1 #pragma warning (disable:4996)
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<stdio.h>
 5 #include<math.h>
 6 #include<string.h>
 7 #include<string>
 8 #include<queue>
 9 #include<vector>
10 #define MAX1 100005            /*1e5 + 5*/
11 #define MAX2 1000000005        /*le9 + 5*/
12 #define MAX3 200005            /*2e5 + 5*/
13 #define MAX4 5005            /*5e3 + 5*/
14 #define MAX5 1005            /*1e3 + 5*/
15 #define MAX6 10005            /*1e4 + 5*/
16 #define T1 27
17 #define T2 25
18 #define T3 18
19 #define MOL 9223372036854775807
20 using namespace std;
21 typedef long long int ll;
22 //memset(sm, 0, sizeof(sm));
23 int main() {
24     ll n, m, t;
25     ll i, j, k;
26     while (scanf("%lld", &t) != EOF) {
27         ll a1 = 0, a2 = 0;
28         ll b = 0;
29         ll cnt = -1;
30         t++;
31         n = 0;
32         while (t--) {
33             if(t)scanf("%lld", &n);
34             //cout << cnt << endl;
35             if (a1 && a2 && b != a1 && b != a2) {
36                 if (n == a1) {
37                     a1 = b; cnt++;
38                 }
39                 else if (n == a2) {
40                     a2 = b; cnt++;
41                 }
42                 else {
43                     a1 = b; cnt++;
44                 }
45             }
46             else if (a1 == 0 || b != a1) {
47                 a1 = b; cnt++;
48             }
49             else if (a2 == 0 || b != a2) {
50                 a2 = b; cnt++;
51             }
52             b = n;
53             n = 0;
54         }
55         cout << cnt << endl;
56     }
57     return 0;
58 }