2021/07/14/D CodeForces - 1479B1
阿新 • • 發佈:2021-07-15
已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自寫 最初WA 未考慮隔位的重複#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 20using 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 }
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 }