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 }

 

posted @ 2021-07-15 13:54  听说福建人很好吃  阅读(85)  评论(0)    收藏  举报