zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    MVC中的统一验证机制~终极了(自己的改良版)
    基础才是重中之重~类是怎么执行的
    IE和火狐中模仿Click事件及提交到新窗口总结
    基础才是重中之重~你是否真正理解static对象
    VS远程调试(在IIS中打开网站,进入VS中的断点)
    iOS开发复选框类库SSCheckBoxView
    通过修改程序解决Vista/Win7/Win8下应用程序兼容性问题
    读《微软研发:制胜策略》总结(1)
    hdu1081To The Max
    Red hat 5.4 安装Eclipse 出现的问题
  • 原文地址:https://www.cnblogs.com/lvguapi/p/13728665.html
Copyright © 2011-2022 走看看