結果
問題 | No.2858 Make a Palindrome |
ユーザー |
![]() |
提出日時 | 2024-08-25 14:58:09 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 4,942 bytes |
コンパイル時間 | 2,355 ms |
コンパイル使用メモリ | 207,956 KB |
最終ジャッジ日時 | 2025-02-24 01:19:16 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 27 WA * 13 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef long double ld;typedef pair<ll,ll> PP;// #define MOD 1000000007#define MOD 998244353#define INF 2305843009213693951//#define INF 810114514#define PI 3.141592653589#define setdouble setprecision#define REP(i,n) for(ll i=0;i<(n);++i)#define OREP(i,n) for(ll i=1;i<=(n);++i)#define RREP(i,n) for(ll i=(n)-1;i>=0;--i)#define ORREP(i,n) for(ll i=(n);i>=1;--i)#define rep(i,a,b) for(ll i=(a);i<=(b);++i)#define ALL(v) (v).begin(), (v).end()#define GOODBYE do { cout << "-1" << endl; return 0; } while (false)#define MM <<" "<<#define Endl endl#define debug true#define debug2 falseclass rollinghash{// Copyright (c) 2023 0214sh7// https://github.com/0214sh7/library/private:static constexpr long long mod = (1LL << 61)-1;std::vector<long long> Base = {12345,10000000};std::vector<long long> BaseInv;std::vector<std::vector<long long>> BaseInvExp;static constexpr long long h = 100;long long product(long long a,long long b){static constexpr long long m = 1LL << 31;long long a1 = a/m,a2 = a%m;long long b1 = b/m,b2 = b%m;long long r = 0 , s;r = (r + 2*a1*b1) % mod;s = (a1*b2 + b1*a2) % mod;long long s1 = s/m,s2 = s%m;s = (2*s1+m*s2) % mod;r = (r + s) % mod;r = (r + a2*b2) % mod;return r;}long long power(long long b,long long e){long long r=1;while(e){if(e&1){r=product(r,b)%mod;}b=product(b,b)%mod;e >>=1;}return r;}public:std::vector<long long> S;std::vector<std::vector<long long>> H,Hsum;void init(std::vector<long long> cs){S=cs;int n=S.size();BaseInv.resize(Base.size());BaseInvExp.resize(Base.size());H.resize(Base.size());Hsum.resize(Base.size());for(int i=0;i<(int)Base.size();i++){BaseInvExp[i].assign(n+1,1);H[i].assign(n+1,0);Hsum[i].assign(n+1,0);}//逆元for(int i=0;i<(int)Base.size();i++){BaseInv[i]=power(Base[i],mod-2);}for(int i=0;i<(int)Base.size();i++){for(int j=0;j<n;j++){BaseInvExp[i][j+1] = product(BaseInvExp[i][j],BaseInv[i]);}}//本体for(int i=0;i<(int)Base.size();i++){long long b=1;for(int j=0;j<n;j++){H[i][j]=product(b,S[j]+h);b=product(b,Base[i]);}}//累積和for(int i=0;i<(int)Base.size();i++){for(int j=0;j<n;j++){Hsum[i][j+1]=(Hsum[i][j]+H[i][j])%mod;}}}rollinghash(std::vector<long long> C){init(C);}std::vector<long long> get(int l,int r){std::vector<long long> R(Base.size());for(int i=0;i<(int)Base.size();i++){long long g = (Hsum[i][r]-Hsum[i][l]+mod)%mod;g=product(g,BaseInvExp[i][l]);R[i] = g;}return R;}std::vector<long long> instant(std::vector<long long> P){std::vector<long long> R;for(int i=0;i<(int)Base.size();i++){long long r = 0, b = 1;for(int j=0;j<(int)P.size();j++){r = (r+product(b,P[j]+h))%mod;b = product(b,Base[i]);}R.push_back(r);}return R;}std::vector<long long> connect(std::vector<long long> P,long long ps,std::vector<long long> Q,long long qs){std::vector<long long> R;for(int i=0;i<(int)Base.size();i++){long long r = (product(Q[i],power(Base[i],ps))+P[i])%mod;R.push_back(r);}return R;assert(qs==qs);}};void solve(){ll N,X;cin >> N >> X;string S;cin >> S;vector<ll> Ss(N);REP(i,N){Ss[i] = S[i];}rollinghash rolS(Ss);reverse(ALL(Ss));rollinghash rolR(Ss);// 回文か?if(rolS.get(0,N)==rolR.get(0,N)){cout << (X+N-1)/N << endl;return;}// 2-回文か?REP(i,N-1){if(rolS.get(0,i+1)==rolR.get(N-i-1,N) && rolS.get(i+1,N)==rolR.get(0,N-i-1)){ll c = max(i+1,N-i-1);ll Ans = 1, t = max(0ll,X-c);Ans += (t+N-1)/N;cout << Ans << endl;return;}}cout << -1 << endl;return;}int main(void){//cin.tie(nullptr);//ios::sync_with_stdio(false);ll T;cin >> T;REP(_,T){solve();}return 0;}