acwing 周赛90

59 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情 又是见证彩笔的一次周赛,学弟AK了,我这个贵物没AK,我要不考虑退役吧!

## AcWing 4806. 首字母大写 第一题应该是不能再送分的送分题了。。。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <unordered_map>
#include <stack>
#include <queue>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
typedef pair<int,int> PII;
typedef pair<string,int> PSI;
typedef stack<int> stk;
int gcd(int x,int y){
    return y?gcd(y,x%y):x;
}
ll qmi(ll x,ll y,int mod){
    ll res=1;
    while(y){
        if(y&1) res=res*x%mod;
        y>>=1;
        x=x*x%mod;
    }
    return res;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    
    string s;
    cin>>s;
    if(s[0]>='a' && s[0]<='z'){
        s[0]=s[0]-'a'+'A';
    }
    cout<<s[0];
    for(int i=1;i<s.size();i++) cout<<s[i];
    
    return 0;
}

AcWing 4807. 找数字

这题乍一看我以为是dfs,于是我就跳过了去看最后一题,最后一题wa了之后回来一看肯定不是dfs,因为没有数字个数的限制,而且数据范围也很大,后来发现就是一道简单的模拟+贪心,先考虑不可能的情况(就是输出-1 -1)的情况,也就是9m>s 或者m>1 && s==0这两种情况, 然后考虑最大情况,最大很简单,就是从前到后如果能输出9就输出9,不能的话就输出剩下的s和0,但是最小情况就要考虑到前导不为0的情况,因此可以分s是否为9的倍数的关系以及s和m的关系讨论。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <unordered_map>
#include <stack>
#include <queue>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
typedef pair<int,int> PII;
typedef pair<string,int> PSI;
typedef stack<int> stk;
int gcd(int x,int y){
    return y?gcd(y,x%y):x;
}
ll qmi(ll x,ll y,int mod){
    ll res=1;
    while(y){
        if(y&1) res=res*x%mod;
        y>>=1;
        x=x*x%mod;
    }
    return res;
}
int m,s;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>m>>s;
    if(s==0){
        if(m==1) cout<<"0 0"<<"\n";
        else cout<<"-1 -1\n";
    }
    else if(9*m<s) cout<<"-1 -1\n";
    else{
        if(s==m*9){
            for(int i=1;i<=m;i++) cout<<9;
        }
        else{
            if(s%9==0){
                int cnt=s/9;
                cout<<1;
                for(int i=2;i<=m-cnt;i++) cout<<0;
                cout<<8;
                for(int i=1;i<=cnt-1;i++) cout<<9;
            }
            else{
                int cnt2=s/9;
                int mo=s%9;
                if(cnt2+1==m){
                    cout<<mo;
                    for(int i=1;i<=cnt2;i++) cout<<9;
                }
                else{
                    cout<<1;
                    for(int i=1;i<m-cnt2-1;i++) cout<<0;
                    cout<<mo-1;
                    for(int i=1;i<=cnt2;i++) cout<<9;
                }
            }
        }
        cout<<" ";
        int cnt1=s/9;
        int mo=s%9;
        if(cnt1!=m){
            
        }
        for(int i=1;i<=cnt1;i++){
            cout<<9;
        }
        if(cnt1!=m) cout<<mo;
        for(int i=cnt1+2;i<=m;i++){
            cout<<0;
        }
    }
    return 0;
}

4808. 构造字符串

C我是最先看的,然后一直卡到最后,nmd,C是一个不难的字符串题,首先暴力+贪心妥妥过,就是找最长的相同前缀和后缀,找出来后输出k次,然后把字符串s的剩余的部分输出,很简单吧,但对于字符串贵物我来说简直逆天模拟,因为少考虑到了循环子串的情况,榆树差一个点,tnn;

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <unordered_map>
#include <stack>
#include <queue>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
typedef pair<int,int> PII;
typedef pair<string,int> PSI;
typedef stack<int> stk;
int gcd(int x,int y){
    return y?gcd(y,x%y):x;
}
ll qmi(ll x,ll y,int mod){
    ll res=1;
    while(y){
        if(y&1) res=res*x%mod;
        y>>=1;
        x=x*x%mod;
    }
    return res;
}
int n,k;
string t;
bool ok=0;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>n>>k;
    string s;
    cin>>s;
    for(int i=1;i<=s.size();i++){
        string str=s.substr(0,i);
        if(s.size()>=str.size()*2){
            if(s.size()%str.size()!=0){
                string ss="";
                int cnt=s.size()/str.size();
                for(int i=1;i<=cnt;i++){
                    ss=ss+str;
                }
                int mo=n%str.size();
                ss=ss+str.substr(0,mo);
                if(ss==s){
                    ok=true;
                    t=str;
                    break;
                }
            }
            else{
                string ss="";
                for(int j=1;j<=s.size()/str.size();j++){
                    ss=ss+str;
                }
                if(ss==s){
                    t=str;
                    ok=1;
                    break;
                }
            }
        }
        else{
            int cnt=0;
            for(int j=str.size();j<s.size();j++){
                if(s[j]==s[j-str.size()]) cnt++;
            }
            if(cnt==s.size()-str.size()){
                t=str;
                ok=1;
                break;
            }
        }
    }
    for(int i=1;i<=k;i++) cout<<t;
    if(t!=s){
        for(int i=t.size();i<s.size();i++){
            cout<<s[i];
        }
    }
  
    return 0;
}

退役了。