首页 > 其他分享 >ybt 1459:friends

ybt 1459:friends

时间:2022-11-06 22:35:21浏览次数:40  
标签:md f2 return int pow ybt include friends 1459

 

写下一个字符串 A,将其复制一遍得到B ,在任意位置(包括首尾)插入一个字符得到 C。现在你得到C。求出 A

 

题意中的  [复制]: 这个多余的字符在 [1,md] 或 [md,n]

枚举这个字符的位置,剩余的东西是2个A, 当前区间有插入的,那么另一个区间是完整的

 

先算一下字符串的hash

int f(int l,int r,int k)  找出 [L,R] 去掉位置k 的串的hash

 

 

 

#include<iostream>
#include <algorithm>
#include <cstring>
using namespace std;
 #define int long long
  const int N=2e6+5;
 char s[N];
 int flag=0;
 string yy,ans1,ans2;
 int n;
 int h[N],pow[N];
 int bas=131;
 
 int f2(int l,int r){
     return h[r]-h[l-1]*pow[r-l+1];
 }
 int f(int l,int r,int k){
     return f2(l,k-1)*pow[r-k]+f2(k+1,r);
 }
 
 void solve(){
     int i,j,t1,t2;
     int md=(1+n)/2;
     
     t2=f2(md+1,n);
     for(i=md+1;i<=n;i++) yy.push_back(s[i]);
     for(i=1;i<=md;i++){
         t1=f(1,md,i);
         if(t1==t2){
             flag++; ans1=yy;break;
         }
     }
     yy.clear();
     
     t1=f2(1,md-1);
     for(i=1;i<md;i++) yy.push_back(s[i]);
     for(i=md;i<=n;i++){
         t2=f(md,n,i);
         if(t1==t2){
             flag++; ans2=yy;break;
         }
     }
     
     
     if(flag==0) cout<<"NOT POSSIBLE";
     else if(flag==1||ans1==ans2) {if(ans1.size()) cout<<ans1; else cout<<ans2;}
     else cout<<"NOT UNIQUE";
     cout<<endl;
 }
 
 void init(){
     h[0]=0; pow[0]=1;
     for(int i=1;i<=n;i++){
         pow[i]=pow[i-1]*bas;
         h[i]=h[i-1]*bas+s[i]-'A'+1;
     }
 }
  main(){
     cin>>n>>s+1;
     if(n%2==0) return cout<<"NOT POSSIBLE",0;
     init();
     solve();
 }

 

标签:md,f2,return,int,pow,ybt,include,friends,1459
From: https://www.cnblogs.com/towboa/p/16864412.html

相关文章

  • [luogu6575]Friends
    记$s=p+q$,当存在一个点度数$\ges$时,显然无解记$d_{S,T}=\sum_{x\inS,y\inT}[(x,y)\inE]$,称$S\subseteqV$合法当且仅当$|S|\lep$且$d(S,V\backslashS)\leq$结论:若......
  • csu 1552: Friends 二分图 + Miller_Rabin
    ​​http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1552​​把那n个数写两次,分成相同的两堆,判断相加是质数的,连一条边,然后找最大匹配,ans=最大匹配/2做的时候一直......
  • python爬取“舔狼”语录-助你520之前找到girlfriends
    ......
  • ybtoj 1.1.4 序列个数
    一道很有趣的题能空手AC的都是大佬  乍一看感觉跟递推没啥大关系()事实上我们要把这个问题展开成一个二维的平面(能想出来这个的我stoorzstoorzstoorzstoorz......
  • MyBtis 七 ——添加&&主键返回
    配置文件完成添加功能1、编写接口方法:Mapper接口参数:除了id之外的所有数据结果:voidvoidadd(Brandbrand); ......
  • [Google] LeetCode 1101 The Earliest Moment When Everyone Become Friends 并查集
    Therearenpeopleinasocialgrouplabeledfrom0ton-1.Youaregivenanarraylogswherelogs[i]=[timestampi,xi,yi]indicatesthatxiandyiwillbe......
  • YbtOJ 「数学基础」第6章 期望问题
    既然被提醒了不要咕咕咕那就先写一点(?不过过几天估计就又咕啦。深刻体会到了写完几道题统一补博客的难受。期望题LaTeX好难打诶可能写得简略点qaq例题1.单选错位emmm......
  • Mybtis中的动态SQL
    if:if标签可以通过其中的test属性的表达式进行判断,若表达式的结果为true,则标签中的内容会执行,反之标签中的内容不会执行如何判断是否有设置该条件,其中内容均为null或者'......
  • 划分数列(ybtoj递推练习题1)
    题目描述给定一个长度为n的数列 ,要求划分最少的段数,使得每一段要么单调不降,要么单调不升。输入格式第一行一个整数 。接下来n个数表示数列 。......
  • YBTOJ 贪心算法合集
    奶牛晒衣服开个堆,记录个时间,每次抠出来堆顶减去b再扔回去就做完了。read(n,a,b);rep(i,1,n)read(h[i]);priority_queue<int>q;rep(i,1,n)q.push(h[i]);in......