• Codeforces AIM Tech Round3


    打得最烂一场Codeforces,多次都错题,无限WA。。。

    A题:

    题意:给定n个橘子的大小,大小超过b的丢掉,不足d的补充进来,同时超过d的部分去掉,问要去掉几次

    分析:直接模拟即可

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int maxn=100020;
    15 int a[maxn];
    16 int n,b,d;
    17 int main()
    18 {
    19     while(cin>>n>>b>>d)
    20     {
    21         for(int i=0;i<n;i++)
    22             scanf("%d",&a[i]);
    23         vector<int> que;
    24         for(int i=0;i<n;i++)
    25         {
    26             if(a[i]<=b)
    27                 que.push_back(a[i]);
    28         }
    29         queue<int> q;
    30         while(!q.empty())
    31             q.pop();
    32         int cnt=0;
    33         for(int i=0;i<que.size();i++)
    34         {
    35             int t=que[i];
    36             q.push(t);
    37         }
    38         while(!q.empty())
    39         {
    40             int h=q.front();
    41             q.pop();
    42             while(h<=d)
    43             {
    44                 if(q.empty()) break;
    45                 int f=q.front();
    46                 q.pop();
    47                 h+=f;
    48                 if(h>d)
    49                 {
    50                     cnt++;
    51                     break;
    52                 }
    53             }
    54         }
    55         cout<<cnt<<endl;
    56     }
    57     return 0;
    58 }
    View Code

    B题:

    题意:给定n个点的坐标,同时给定一个点的坐标,求这个点到达其中n-1个点的最短路径

    分析:因为必将到达a[n-1]或者a[0],所以我们先将n个点的坐标进行排序,然后比较覆盖a[n-1]和a[0]的所有情况下的最小值,注意n=1的时候结果为0

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int maxn=100010;
    15 int a[maxn];
    16 int n,d;
    17 int main()
    18 {
    19     while(cin>>n>>d)
    20     {
    21         for(int i=0;i<n;i++)
    22             scanf("%d",&a[i]);
    23         if(n==1){
    24             cout<<"0"<<endl;
    25             continue;
    26         }
    27         sort(a,a+n);
    28         int h=1<<30;
    29         int cnt=1<<30;
    30         if(d<=a[0])
    31         {
    32             cout<<abs(a[n-2]-d)<<endl;
    33             continue;
    34         }else if(a[n-1]<=d)
    35         {
    36             cout<<abs(a[1]-d)<<endl;
    37             continue;
    38         }
    39         if(d>=a[0]&&d<=a[1])
    40         {
    41             h=abs(a[n-1]-d);
    42         }
    43         if(d<=a[n-1]&&d>=a[n-2])
    44         {
    45             h=min(h,abs(a[0]-d));
    46         }
    47         cnt=min(cnt,2*(abs(a[0]-d))+abs(a[n-2]-d));
    48         cnt=min(cnt,2*(abs(a[n-2]-d))+abs(a[0]-d));
    49         cnt=min(cnt,2*(abs(a[n-1]-d))+abs(a[1]-d));
    50         cnt=min(cnt,2*(abs(a[1]-d))+abs(a[n-1]-d));
    51         cout<<min(h,cnt)<<endl;
    52     }
    53     return 0;
    54 }
    View Code

    C题:

    题意:给定一个字符串,然后对于其中的一个子串进行如下变化,每个字母变成它的前一个字母,a变成z,求变化以后字典序最小

    分析:开始不理解字典序,后来知道就是让排在前面的数尽量小。这样就可以贪心,对于排在尽量靠前不含有a的子串进行变化,若全是a,则将最后一个a变成z即可。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 string s;
    15 int main()
    16 {
    17     while(cin>>s)
    18     {
    19         int n=s.length();
    20         int flag=0;
    21         for(int i=0;i<n;i++)
    22         {
    23             if(s[i]!='a')
    24             {
    25                 flag=1;
    26                 s[i]=s[i]-1;
    27             }else if(s[i]=='a'&&flag)
    28             {
    29                 break;
    30             }
    31         }
    32         if(flag)
    33         {
    34             for(int i=0;i<n;i++)
    35                 printf("%c",s[i]);
    36         }else{
    37             for(int i=0;i<n-1;i++)
    38                 printf("%c",s[i]);
    39             printf("z");
    40         }    
    41         printf("
    ");
    42     }
    43     return 0;
    44 }
    View Code
  • 相关阅读:
    //判断安卓 和ios
    不同屏幕适配
    在iOS设备下,h5的input框失焦后页面被顶起来一部分bug 用css解决办法
    div跟随手指滑动
    滑动事件
    手指长按事件
    es6数组属性
    loading加载百分比 以及根据加载进度移动元素
    刮刮乐
    h5上传图片并预览
  • 原文地址:https://www.cnblogs.com/wolf940509/p/5808965.html
Copyright © 2020-2023  润新知