Codeforces Round #607 (Div. 2)(ABC题解好像都是模拟)C自增变量写错,一直debug到结束qwq

A. Suffix Three

题意:

本题要求你设计一个语言检索系统。
题目保证每个句子的后缀都包含关键字。

思路:

  1. 可以直接暴力匹配,
  2. 但是可以观察每个关键字的特征,之后if,判断即可。

AC(IF)

#include <iostream>
#include <string>
using namespace std;
const string ans[]={"FILIPINO","JAPANESE","KOREAN"};
int main()
{
    int  t;cin>>t;
    while(t--){
        string s;
        cin>>s;
        int len=s.size();
        if(s[len-1]=='o')cout<<ans[0]<<endl;
        else if(s[len-2]=='s')cout<<ans[1]<<endl;
        else if(s[len-1]=='a')cout<<ans[2]<<endl;
    }
    return 0;
}

AC(暴力匹配)

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const string tmp[]={"op","used","usam","adinm"};
const string ans[]={"FILIPINO","JAPANESE","KOREAN"};
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        string s;cin>>s;
        reverse(s.begin(),s.end());
        string ta=s.substr(0,2);
        int fl=1;
        if(ta==tmp[0])fl=1;
        ta=s.substr(0,4);
        if(ta==tmp[1]||ta==tmp[2])fl=2;
        ta=s.substr(0,5);
        if(ta==tmp[3])fl=3;
        fl--;
        cout<<ans[fl]<<endl;
    }
    return 0;
}

B. Azamon Web Services

题意:

给你一个s串,和c串。
现在只能调整一组s【i】和s【j】使得 s < c s<c s<c

思路:

  1. 预处理suf后缀统计一下 i i i位置后的最小字母。(注意:假如最小的是A,那么最右边的A明显更优
  2. 之后贪心,假如s【 i i i】位置和s【suf【i】】不同,那么就直接交换,然后break。
  3. 再比较

AC(赛后)

#include <iostream>
#include <string>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        string s1,s2;
        cin>>s1>>s2;
        if(s1<s2)cout<<s1<<endl;
        else {
            int len=s1.size();
            int suf[6000];
            for(int i=len-1; i>=0; i--){
                suf[i]=i;
                if(i!=len-1 && s1[suf[i+1]]<=s1[suf[i]])suf[i]=suf[i+1];//suf[i]=min(suf[i+1],suf[i]);
            }
            for(int i=0,j=0; i<s1.size()&&j<s2.size(); i++,j++){
                if(s1[suf[i]]!=s1[i]){
                    swap(s1[i],s1[suf[i]]);
                    break;
                }
            }
            if(s1<s2)cout<<s1<<endl;
            else cout<<"---"<<endl;
        }
    }
    return 0;
}

AC(赛中)

#include <iostream>
#include <string>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        string s1,s2;
        cin>>s1>>s2;
        if(s1<s2)cout<<s1<<endl;
        else {
            int len=s1.size();
            int suf[6000];
            for(int i=len-1; i>=0; i--){
                suf[i]=i;
                if(i!=len-1 && s1[suf[i+1]]<=s1[suf[i]])suf[i]=suf[i+1];//suf[i]=min(suf[i+1],suf[i]);
            }
            for(int i=0,j=0; i<s1.size(); i++,j++){
                if(s1[i]>s2[j]&&suf[i]!=i){
                    swap(s1[i],s1[suf[i]]);
                    break;
                }else if(s1[i]==s2[j]&&suf[i]!=i){
                    if(s1[suf[i]]<s2[j]){
                        swap(s1[i],s1[suf[i]]);
                        break;
                    }
                }
            }
            if(s1<s2)cout<<s1<<endl;
            else cout<<"---"<<endl;
        }
    }
    return 0;
}

C. Cut and Paste(模拟)

题意:

  1. 光标的定义:
    在这里插入图片描述

  2. 有三个操作。
    在这里插入图片描述

思路:

就是模拟。不过因为长度可能很大,所以要分开计算。

  1. 由于每一次操作,都是在原s上的扩充,所以先把前x个的字符串得到。
  2. 之后再算x次操作后,的长度。

AC(赛后)

#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
string s;
int x;
void append(ll &len, int mul, int l, int r){
    for(int i=2; i<=mul; i++){
        for(int j=l; j<=r; j++){
            if(len<x)s+=s[j],len++;
        }
        if(len>=x)return ;
    }
}
int main()
{
    int t;
    cin>>t;
    while(t--){
        cin>>x;
        cin>>s;
        ll len,ans;
        ans=len=s.size();
        for(int i=0; i<len; i++)s[i]=s[i]-'0';
        for(int i=1; i<=x; i++){
            int cur=i-1;
            append(len,s[cur],i,len-1);
            if(len>=x)break;
        }
        for(int i=1; i<=x; i++){
            int cur=i-1;
            ll suf=(ans-i+mod)%mod;
            for(int j=2; j<=s[cur]; j++)ans=(ans+suf)%mod;
        }
        cout<<ans<<endl;
    }
    return 0;
}

AC(赛中,迭代变量自增码歪,一直debug到结束qwq)

#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        ll x,len,ans;cin>>x;
        string s;
        cin>>s;
        ans=len=s.size();
        for(int i=0; i<len; i++)s[i]=s[i]-'0';
        for(int i=1; i<=x; i++){
            int cur=i-1;
            if(len>=x)break;// if(s[cur]==1)continue;// time=s[cur]-'0';
            string tm=s.substr(i,len-i);
            //cout<<"mod of the tm :"<<endl;
            //for(int j=0; j<len-i; j++)cout<<(int)tm[j];
          //  cout<<endl;
            int past_len=len-i;
            for(int j=2; j<=s[cur]; j++){
               // cout<<"j == "<<j<<endl;
                //cout<<"len== "<<len<<endl;
                if(len+past_len<=x)s+=tm,len+=past_len;
                else {
                    int k=0;
                    //cout<<(int)tm[0]<<endl;
                    for(k=0; len+k+1<=x; k++){
                        //cout<<"tm[k] :"<<tm[k]<<endl;
                        s+=tm[k];
                    }
                    len+=k;
                    break;
                }
            }
           // cout<<"s and len :"<<endl;
            //for(int j=0; j<len; j++)cout<<(int)s[j];
            //cout<<endl;
           // cout<<len<<endl;
        }
        for(ll i=1; i<=x; i++){
            int cur=i-1;///int time=s[cur]-'0';///if(s[cur]==1)continue;
            ll suf=(ans+mod-i)%mod;
           // ll suf=( (ans-i)+mod)%mod;
            for(int j=2; j<=s[cur]; j++)ans=(ans+suf)%mod;
        }
        cout<<ans<<endl;
    }
    return 0;
}

D. Beingawesomeism(模拟)

题解传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值