CCPC网络选拔赛总结

  好长时间没做题,自己跟队友都生疏了,最后瞎搞出来三题。T1002看出是个最小生成树,用Kruskal算法通过了前两个样例,最后一个样例运行不了,数据太大了,而我又无法解决,是我想的太简单了,最后没过。T1003我和一个队友一起解决,队友给力,一发就过了。T1007题意比较难懂,队友根据样例大胆猜测答案就是出现次数最多的那个字母的出现次数,结果竟然过了。T1010是个签到题,我就过了这一道,还因为break的问题卡了十几分钟。

1003 Express Mail Taking

 1. 题意

  有一排n个储物柜,编号按顺序分别为1到n,m个快递在这些储物柜中,一个储物柜最多放一个快递。小明有m个快递需要取,每次取一个快递都需要去密码柜开锁,密码柜在第k号储物柜,小明从1号储物柜出发,最后再回到1号储物柜,问最少走多少步。

 2. 题解

  除了小于k的第一个快递,别的都需要从k走到ai,再走回去,贡献值为abs(a[i] - k) * 2,小于k的第一个快递回去的时候顺道取即可,无贡献,所以最后取小于k的第一个快递。如果没有小于k的快递,累加贡献值即可。

 3. 代码

 1 #include<bits/stdc++.h>
 2 #define ll long long 
 3 const ll maxn = 1e5 + 5;
 4 using namespace std;
 5 int t;
 6 int main() {
 7     cin >> t;
 8     while(t--) {
 9         ll n, m, k;
10         ll a[maxn] = {0};
11         scanf("%lld %lld %lld", &n, &m, &k);
12         
13         for(int i = 1; i <= m; i++) {
14             scanf("%lld", &a[i]);
15         }
16         ll ans = k - 1;
17         sort(a + 1, a + 1 + m);
18         int i = 1;
19         if(a[1] < k) {
20             i++;
21         }
22             
23         for(; i <= m; i++) {
24             ans += abs(a[i] - k) * 2;
25         }
26         ans += (k - 1);
27         cout << ans << endl;
28     }
29     
30     return 0;
31 }
View Code

 1007 CCPC Training Class

 1. 题意

  找出出现次数最多的那个字母,输出它的出现次数。

 2. 题解

  用一个数组记录字母的出现次数,维护最大值。

 3. 代码

 1 #include<bits/stdc++.h>
 2 #define ll long long 
 3 using namespace std;
 4 int t;
 5 int main() {
 6     ios::sync_with_stdio(false);
 7     cin >> t;
 8     for(int k = 1; k <= t; k++) {
 9         string s;
10         cin >> s;
11         
12         int a[100001] = {0};
13         for(int i = 0; i < s.size(); i++) {
14             a[(int)s[i]]++;
15         }
16         
17         int mx = 0;
18         for(int i = 96; i <= 96 + 26; i++) {
19             mx = max(mx, a[i]);
20         }
21         
22         cout << "Case #" << k << ": " << mx << endl;
23     }
24     return 0;
25 }
View Code

1010 Reports

 1. 题意

  给定若干数字,如果满足连续两个数字相等就输出NO,否则输出YES。

 2. 题解

  数据不大,可以都存进一个数组,逐个判断。

 3. 代码

 1 #include<bits/stdc++.h>
 2 #define ll long long 
 3 const ll maxn = 1e5 + 5;
 4 using namespace std;
 5 
 6 int main() {
 7     ios::sync_with_stdio(false); 
 8     int t = 0;
 9     cin >> t;
10     while(t--) {
11         int n;
12         cin >> n;
13         int a[maxn] = {0};
14         for(int i = 1;i <= n; i++) {
15             cin >> a[i];
16         }
17 
18         bool ans = true;
19         for(int i = 2; i <= n; i++) {
20             if(a[i] == a[i - 1]) {
21                 ans = false;
22             }
23         }
24         
25         if(ans) {
26             cout << "YES" << endl;
27         } else {
28             cout << "NO" << endl;
29         }    
30     }
31     
32     return 0;
33 }
View Code
原文地址:https://www.cnblogs.com/lvguapi/p/13728665.html