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
  • 相关阅读:
    mysql数据库常用指令
    解决windows的mysql无法启动 服务没有报告任何错误的经验。
    “Can't open file for writing”或“operation not permitted”的解决办法
    启动Apache出现错误Port 80 in use by "Unable to open process" with PID 4!
    如何打开windows的服务services.msc
    常见的HTTP状态码 404 500 301 200
    linux系统常用的重启、关机指令
    (wifi)wifi移植之命令行调试driver和supplicant
    linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
    alloc_chrdev_region申请一个动态主设备号,并申请一系列次设备号
  • 原文地址:https://www.cnblogs.com/lvguapi/p/13728665.html
Copyright © 2011-2022 走看看