zoukankan      html  css  js  c++  java
  • 牛客 —— 3 th

    传送门


    A. Clam and Fish

    题意

    小月有 (n) 单位的时间都在钓鱼,每个单位时间有四种状态,有蛤蜊/没蛤蜊 , 有鱼/没鱼。小月事先知道这 (n) 个时间点的状态。每个时间点有四种可能的动作:

    • 若该时间点有鱼,则可以直接钓鱼。
    • 若该时间点有蛤蜊,则可以用该蛤蛎制作一个鱼饵。
    • 若该时间点身上有至少一个鱼饵,则可以用一个鱼饵钓一条鱼,钓完后就少 了一个鱼饵。
    • 什么事都不做。

    请问小月最多可以钓多少条鱼。

    数据范围

    (1leq t leq 2.5 imes 10^{5})
    (1leq n leq 2 imes 10^{6})

    题解

    只需要考虑什么都没有的和有蛤蜊的数量,其他的直接钓鱼即可
    如果当前第0类和第1类匹配后还剩下(x)个第1类,那么这(x)个第一类中就可以一个生产鱼饵一个钓鱼

    Code

    cpp
    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define fi first
    #define se second 
    #define ll long long
    #define pb push_back
    typedef pair<long long,long long> pll;
    typedef pair<int,int> pii;
    typedef vector<int> vi;
    typedef vector<long long> vll;
    typedef double db;
    const ll mod=1e9+7;
    ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
    ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
    int _;
    const int N = 2e6+10;
    int sum;
    int n;
    char s[N];
    int pe[N];
    int main(){
        for(scanf("%d",&_);_;_--){
            sum=0;
            scanf("%d",&n);
            scanf("%s",s+1);
            int ans=0;
            rep(i,1,n+1){
                if(s[i] == '0') {
                    if(sum) { ans++;sum--;}
                }
                else if(s[i] == '1'){
                    sum++;
                } 
                else if(s[i] == '2') ans++;
                else ans++;
            }
            ans+=sum/2;
            
            printf("%d
    ",ans);
        }
    }
    
    

    B. Classical String Problem

    题意

    有一个字符串,有两种操作:

    • 询问第 x 个字符。
    • 把最左边的 x 个字符搬到最右边或把最右边 x 个字符搬到最左边。

    每次询问输出当前位置的字符

    数据范围

    (2leq |S|leq 2 imes 10^{6})
    (1leq Qleq 8 imes 10^{5})

    题解

    初始时指针在 n 的前面 |nowcoder
    • 操作 1 询问指针右边第 1 个字符,答案是 n
    • 操作 2 把 4 个字符搬到右边,相当于把指针向右移 4 个字符 nowc|oder
    • 操作 3 询问指针右边第 6 个字符,答案是 o
    • 操作 4 把右边 3 个字符搬到右边,相当于把指针向左移 3 个字符 n|owcoder

    Code

    cpp
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define rep(i,a,n) for(int i=a;i<n;i++)
    const int N=2e6+10;
    int _;
    char s[N];
    int n,q;
    int x;
    int main(){
        scanf("%s",s+1);
        n=strlen(s+1);
        scanf("%d",&q);
        int st=0;
        while(q--){
            char op[2];
            scanf("%s",op);
    
            scanf("%d",&x);
    
            if(*op=='M'){
                st+=x;
                if(x<0) st=(st+n)%n;
            }
            else{
                x+=st;
                if(x%n!=0)
                    printf("%c
    ",s[x%n]);
                else printf("%c
    ",s[n]);
    
            }
        }
    }
    

    L. Problem L is the Only Lovely Problem

    题意

    判断一个字符串是否为 lovely 开头,不分大小写。

    Code

    cpp
    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define fi first
    #define se second 
    #define ll long long
    #define pb push_back
    typedef pair<long long,long long> pll;
    typedef pair<int,int> pii;
    typedef vector<int> vi;
    typedef vector<long long> vll;
    typedef double db;
    const ll mod=1e9+7;
    ll powmod(ll a,ll b,ll p){ll res=1;a%=p;while(b){if(b&1) res=res*a%p;a=a*a%p;b>>=1;}return res;}
    ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
    
    int main(){
        string s;
        cin>>s;
        char mat[12]={'l','o','v','e','l','y','L','O','V','E','L','Y'};
        bool ok=1;
        rep(i,0,6){
            if(s[i]==mat[i] || s[i]==mat[i+6]) continue;
            else {
                ok=0;
                break;
            }
        }
        if(ok) puts("lovely");
        else puts("ugly");
    }
    
  • 相关阅读:
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
    小D课堂
  • 原文地址:https://www.cnblogs.com/hhyx/p/13337051.html
Copyright © 2011-2022 走看看