• AtCoder Beginner Contest 158


    A

    按题意乱搞

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    
    signed main() {
        string str;
        cin>>str;
        if(str=="AAA" || str=="BBB") puts("No");
        else puts("Yes");
    }
    

    B

    老套的题目,按余数讨论即可

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    
    signed main() {
        int n,a,b;
        cin>>n>>a>>b;
        int ans=n/(a+b)*a;
        int r=n%(a+b);
        if(r>a) ans+=a;
        else ans+=r;
        cout<<ans;
    }
    

    C

    找到答案的可能区间然后找最小数即可,注意不要使用浮点

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    
    signed main() {
        int a,b;
        cin>>a>>b;
        int l=max(10*b,(25*a+1)/2);
        int r=min(10*b+10,(25*a+25+1)/2);
        int L=l+0.1,R=r+0.1;
        if(L<R) cout<<L;
        else cout<<-1;
    }
    

    D

    维护头尾两个栈和一个翻转标记

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    
    string str;
    vector <char> v[2];
    int fg=0;
    int q;
    int t1,t2;
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>str;
        cin>>q;
        for(int i=1;i<=q;i++) {
            cin>>t1;
            if(t1==1) {
                fg^=1;
            }
            else {
                cin>>t2;
                char ch;
                cin>>ch;
                if(t2==1) {
                    v[fg].push_back(ch);
                }
                else {
                    v[fg^1].push_back(ch);
                }
            }
        }
        if(fg==0) {
            while(v[0].size()) cout<<v[0].back(), v[0].pop_back();
            cout<<str;
            for(char c:v[1]) cout<<c;
        }
        else {
            while(v[1].size()) cout<<v[1].back(), v[1].pop_back();
            reverse(str.begin(),str.end());
            cout<<str;
            for(char c:v[0]) cout<<c;
        }
    }
    
    

    E

    如果 ((p,10)=1),那么如果一个答案 (k) 不是 (p) 的倍数, (10^rk) 也不是,因此直接处理出大数的带位权前缀和,然后暴力数出 (mod p) 后各余数对应的端点有多少个来计算区间数即可

    否则,(p=2)(p=5),根据初等数论的结论,这两个数字的整除性可以根据尾数判断

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 1000005;
    
    int n,c[10005],p,a[N],s[N],pw[N],ans;
    char str[N];
    
    signed main() {
        cin>>n>>p>>str+1;
        for(int i=1;i<=n;i++) a[i]=str[i]-'0';
        if(__gcd(p,10ll)==1) {
            pw[0]=1;
            for(int i=1;i<=n;i++) pw[i]=pw[i-1]*10%p;
            for(int i=1;i<=n;i++) s[i]=(s[i-1]+pw[n-i]*a[i])%p;
            for(int i=0;i<=n;i++) c[s[i]]++;
            for(int i=0;i<p;i++) ans+=c[i]*(c[i]-1)/2;
            cout<<ans;
        }
        else if(p==2) {
            for(int i=1;i<=n;i++) if(a[i]%2==0) ans+=i;
            cout<<ans;
        }
        else if(p==5) {
            for(int i=1;i<=n;i++) if(a[i]%5==0) ans+=i;
            cout<<ans;
        }
    }
    
    
    

    F

    待填坑

  • 相关阅读:
    Oracle 删除某个用户下的对象
    解决11g导出时,空表不能导出问题
    Oracle常用sql
    Oracle 创建表空间和用户
    chapter4.1、函数,参数
    chapter3.6、标准库datetime
    chapter3.5内建函数
    简单选择排序和二元选择排序
    chapter3.4解析式、生成器
    列表解析练习
  • 原文地址:https://www.cnblogs.com/mollnn/p/12440960.html
Copyright © 2020-2023  润新知