1. 程式人生 > 其它 >ABC 252 - 254 題解(C, D)

ABC 252 - 254 題解(C, D)

ABC 252

本場RP = INT_MIN。

C

我們的Takahashi太不靈活了吧……

對於每個數字,我們都在這個數字停下來時看一看(如888,666等)

這裡我們分“輪”的概念(因為Takahashi不能1秒按兩個),一輪為10秒。

弄個cnt陣列就好辦了。

 1 #include <iostream>
 2 #include <string>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <cctype>
 6 #include <cstring>
 7
#include <iomanip> 8 #include <cstdlib> 9 #include <ctime> 10 #include <set> 11 #include <map> 12 #include <utility> 13 #include <queue> 14 #include <vector> 15 #include <bitset> 16 #include <stack> 17 #include <sstream> 18 #include <algorithm> 19
20 using namespace std; 21 22 string s[105]; 23 int place[105][10]; 24 int cnt[10]; 25 26 int main() { 27 int N; 28 cin >> N; 29 for (int i = 0; i < N; i++) { 30 cin >> s[i]; 31 } 32 for (int i = 0; i < N; i++) { 33 for (int j = 0; j < 10; j++) { 34
place[i][s[i][j] - '0'] = j; 35 } 36 } 37 int ans = 0x3f3f3f3f; 38 for (int i = 0; i < 10; i++) { 39 memset(cnt, 0, sizeof(cnt)); 40 for (int j = 0; j < N; j++) { 41 cnt[place[j][i]]++; 42 } 43 int this_ans = 0; 44 for (int j = 0; j < 10; j++) { 45 this_ans = max(this_ans, j + (cnt[j] - 1) * 10); 46 } 47 ans = min(ans, this_ans); 48 } 49 cout << ans; 50 return 0; 51 }
View Code

廣告:Think twice, Code once!

D

首先統計每個數出現了多少次。

假設說有四個數,分別出現a1, a2, a3, a4次……

 a1*a2*a3+a1*a2*a4+a1*a3*a4+a2*a3*a4

= a1*a2*(a3+a4)+a3*a4*(a1+a2)

= (a1)*a2*(a3+a4)+(a1+a2)*a3*(a4)

大膽猜測答案是中間所有數的prefix*now*suffix。

 1 #include <iostream>
 2 #include <string>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <cctype>
 6 #include <cstring>
 7 #include <iomanip>
 8 #include <cstdlib>
 9 #include <ctime>
10 #include <set>
11 #include <map>
12 #include <utility>
13 #include <queue>
14 #include <vector>
15 #include <bitset>
16 #include <stack>
17 #include <sstream>
18 #include <algorithm>
19 
20 using namespace std;
21 
22 #define maxn 200005
23 
24 long long sum[maxn];
25 
26 int main() {
27     int n;
28     scanf("%d", &n);
29     int tmp;
30     for (int i = 0; i < n; i++) {
31         scanf("%d", &tmp);
32         sum[tmp]++;
33     }
34     for (int i = 1; i < 200003; i++) {
35         sum[i] += sum[i - 1];
36     }
37     long long ans = 0;
38     for (int i = 1; i < 200002; i++) {
39         ans += (sum[i - 1] - 0) * (sum[i] - sum[i - 1]) * (sum[200002] - sum[i]);
40     }
41     printf("%lld", ans);
42     return 0;
43 }
View Code

廣告:Think twice, Code once!

ABC 253

本場RP = INT_MAX。

對了,最近我把int RP給廢除了,換了個long double RP。

C

過於興奮的我打了個暴力交上去,然後就TLE了。

我又換成了map交上去,就AC了。

 1 #include <iostream>
 2 #include <string>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <cctype>
 6 #include <cstring>
 7 #include <iomanip>
 8 #include <cstdlib>
 9 #include <ctime>
10 #include <set>
11 #include <map>
12 #include <utility>
13 #include <queue>
14 #include <vector>
15 #include <bitset>
16 #include <stack>
17 #include <sstream>
18 #include <algorithm>
19 
20 using namespace std;
21 
22 multiset<int> s;
23 
24 int main() {
25     int Q;
26     scanf("%d", &Q);
27     while (Q--) {
28         int tp;
29         scanf("%d", &tp);
30         if (tp == 1) {
31             int x;
32             scanf("%d", &x);
33             s.insert(x);
34         } else if (tp == 2) {
35             int x, c;
36             scanf("%d %d", &x, &c);
37               while (c-- && s.find(x) != s.end()) {
38                 s.erase(s.find(x));
39             }
40         } else {
41             printf("%d\n", *(s.rbegin()) - *(s.begin()));
42         }
43     }
44     return 0;
45 }
View Code

 廣告:Think twice, Code once!

D

容!斥!原!理!數!學!題!

還!要!會!等!差!數!列!

我!要!請!他!去!喝!茶!

 1 #include <iostream>
 2 #include <string>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <cctype>
 6 #include <cstring>
 7 #include <iomanip>
 8 #include <cstdlib>
 9 #include <ctime>
10 #include <set>
11 #include <map>
12 #include <utility>
13 #include <queue>
14 #include <vector>
15 #include <bitset>
16 #include <stack>
17 #include <sstream>
18 #include <algorithm>
19 
20 using namespace std;
21 
22 int main() {
23     long long n, a, b;
24     scanf("%lld %lld %lld", &n, &a, &b);
25     long long ans = 0;
26     ans += (1 + n) * n / 2;
27     ans -= (a + n / a * a) * (n / a) / 2;
28     ans -= (b + n / b * b) * (n / b) / 2;
29     long long c = a / __gcd(a, b) * b;
30     ans += (c + n / c * c) * (n / c) / 2;
31     printf("%lld", ans);
32     return 0;
33 }
View Code

廣告:Think twice, Code once!