• 2020牛客多校训练第3场ABC


    题目来源:2020牛客暑期多校训练营(第三场)A-Clam and Fish

    题目链接:https://ac.nowcoder.com/acm/contest/5668/A

    题目大意:有n个阶段,每个阶段可能是4种状态的一种。

          1:没鱼没饲料;

          2:没鱼有饲料;

          3:有鱼没饲料;

          4:有鱼有饲料。

                   对于每个阶段:

          我们可以用饲料做鱼饵,

          或者用鱼饵钓鱼,

          或者在该状态有鱼的时候直接把鱼抓起来。

     

    解题思路:在3.4状态是,我们必然是直接把有的鱼抓起来就可以了。

    在第1种状态,如果我们手里有鱼饵就可以钓一条鱼。

    在第3种状态,如果后面的1的数量比当前存的鱼饵量多或等于,就继续存鱼饵,反之钓鱼。

    */

    #include<bits/stdc++.h>
    using namespace std;
     
    int main()
    {
        int t;
        scanf("%d",&t);
        for(int ii=1;ii<=t;ii++){
            int n;
            scanf("%d",&n);
            string s;
            cin>>s;
            int s1[n+9],s0[n+9];
            s1[n]=s0[n]=0;
            for(int i=n-1;i>=0;i--){
                if(s[i]=='0')s0[i]=s0[i+1]+1;
                else s0[i]=s0[i+1];
            }
            int food=0,fish=0;
            for(int i=0;i<n;i++){
                if(s[i]=='0'){
                    if(food>=1)food--,fish++;
                }
                else if(s[i]=='1'){
                    if(s0[i]>=food)food++;
                    else {
                        if(food>=1)food--,fish++;
                        else food++;
                    }
                }
                else fish++;
            }
            printf("%d
    ",fish);
        }
        return 0;
    }
    

      

    /*

    题目来源:2020牛客暑期多校训练营(第三场)B-Classical String Problem

    题目链接:https://ac.nowcoder.com/acm/contest/5668/B

    题目大意:给你一个字符串,n次操作。

    m表示把前面k个字符挪后面,或把后面-k(k为负数)个挪前面。

    a表示询问,第k个字母是什么。

     

    解题思路:首位相连,看成一个环以后,所谓的挪动其实就是改动把那个字母看成头,然后这题就没了。

    */

     

    #include<bits/stdc++.h>
    using namespace std;
      
    int main()
    {
        string s;
        cin>>s;
        s=" "+s;
        int l=s.size()-1;s[0]=s[l];
        int n;
        cin>>n;
        int sum=0;
        for(int i=1;i<=n;i++){
            getchar();
            char c;
            int x;
            scanf("%c%d",&c,&x);
            if(x<0)x+=l;
            if(c=='A')printf("%c
    ",s[(sum+x)%l]);
            else sum=(sum%l+x)%l;
        }
        return 0;
    }
    

      

    /*

    题目来源:2020牛客暑期多校训练营(第三场)C-Operation Love

    题目链接:https://ac.nowcoder.com/acm/contest/5668/C

     

    题目大意:给出左手和右手的二维坐标表示法。可能会旋转平移,逆时针或顺时针给出,不会改变大小,问是左手还是右手。

     

     

    解题思路:先确定是逆时针还是顺时针。然后找出长度为10的那条边,看它接下来的边的长度就可以确定是左手还是右手了。

    在判断是否相等的过程中需要注意精度问题,有时候结果可能是个小数,需要四舍五入到int型进行判断

    */

     

    #include<bits/stdc++.h>
    using namespace std;
    
    struct point
    {
        double x,y;
        point (){}
        point (double x,double y):x(x),y(y){}
        point operator + (point b){return point (x+b.x,y+b.y);}
        point operator - (point b){return point (x-b.x,y-b.y);}
     
    };typedef point Vector;
    double Cross(Vector a,Vector b){return a.x*b.y-a.y*b.x;}
    point p[24];
    double parea(int n)
    {
        double area=0;
        for(int i=0;i<n;i++)
        {
            area+=Cross(p[i],p[(i+1)%n]);
        }
        return area/2;
    }
    int dis(point a,point b){
        return (int)(sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))+0.5);
    }
    int main()
    {
        int n;
        cin>>n;
        while(n--){
            double s;
            for(int i=0;i<20;i++){
                cin>>p[i].x>>p[i].y;
            }
            p[21]=p[1];
            if(parea(20)<0){
                int i;
                for( i=0;i<20;i++){
                    if(dis(p[i],p[(i+1)%20])==9)break;
                }
                if(dis(p[(i+1)%20],p[(i+2)%20])==6)cout<<"right"<<endl;
                else cout<<"left"<<endl;
            }
            else{
                int i;
                for( i=0;i<20;i++){
                    if(dis(p[i],p[(i+1)%20])==9) break;
                }
                if(dis(p[(i+1)%20],p[(i+2)%20])==6)cout<<"left"<<endl;
                else cout<<"right"<<endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    css数学运算函数 calc(),和css的数学运算
    MySQL设置字段的默认值为当前系统时间
    今天阿里云服务器被挂马wnTKYg挖矿的清理
    linux shell常用命令
    无损扩容,调整Centos6.5服务器分区大小,不适用centos7,centos6.5 调整逻辑卷大小
    添加远程库
    interface 设置默认值
    radio根据value值动态选中
    获取下拉js 具体值
    mysql中int、bigint、smallint 和 tinyint的存储
  • 原文地址:https://www.cnblogs.com/yzxqq/p/13375903.html
Copyright © 2020-2023  润新知