LOADING

加载过慢请开启缓存,浏览器默认开启

daily 2

2023/6/7 daily

CF 615C
每次取模式串的某个子串去对比然后更新当前索引就可以了

void solve(){
  string s,t;
  cin>>s>>t;
  int lenp=s.size(),leno=t.size();
  vector<vector<int>>ans;
  bool matched=false;
  for(int j=0;j<t.size();++j){//origin
    int cur_len=-1;
    matched=false;
    ans.push_back(vector<int>(2));
    for(int i=0;i<s.size();++i){//pattern
        if(s[i]==t[j]){
            matched=true;
            int l=i,r=l;
            int k=0;
            for(int k=1;i+k<s.size()&&j+k<t.size();++k){
                if(s[i+k]==t[j+k])++r;
                else break;
            }
            if(r-l+1>cur_len){
                cur_len=r-l;
                ans.back()[0]=l;
                ans.back()[1]=r;
            }
            l=r=i;
            k=0;
            for(int k=1;i-k>=0&&j+k<t.size();++k){
                if(s[i-k]==t[j+k])--l;
                else break;
            }
            if(r-l+1>cur_len){
                cur_len=r-l;
                ans.back()[0]=r;
                ans.back()[1]=l;
            }
        }
    }
    if(!matched){
        break;
    }
    j+=cur_len;
  }
  if(!matched){
    cout<<-1<<'\n';
  }else{
    cout<<ans.size()<<'\n';
    for(auto k:ans){
        cout<<k[0]+1<<' '<<k[1]+1<<'\n';
    }
  }
  return;
}

CF 513G
暴力搜就好了

void solve(){
  int n,k;
  cin>>n>>k;
  vector<int>a(n);
  for(int i=0;i<n;++i)cin>>a[i];
  double sum=0;
  for(int i=1;i<=n;++i)sum+=1.0*i;
  function<double(int)>dfs=[&](int num){
    if(num==0){
        double total=0.0;
        for(int i=0;i<n;++i){
            for(int j=i+1;j<n;++j){
                if(a[i]>a[j]){
                    total+=1.0;
                }
            }
        }
        return total;
    }
    double cur=0;
    for(int i=0;i<n;++i){
        for(int j=i+1;j<=n;++j){
            reverse(a.begin()+i,a.begin()+j);
            cur+=dfs(num-1);
            reverse(a.begin()+i,a.begin()+j);
        }
    }
    return cur/sum;
  };
  cout.precision(10);
  cout<<dfs(k)<<'\n';
  return;
}