Submission #69380385


Source Code Expand

// 华风夏韵 洛水天依
// 天依宝宝可爱!> <

#include<bits/stdc++.h>

#define int long long
#define double long double
#define il inline
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define rpe(i,a,b) for(int i=(a);i>=(b);--i)
#define repp(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
#define rpee(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
#define inf (int)(0x3f3f3f3f3f3f3f3f)
#define pii pair <int,int>
#define st first
#define nd second
#define mp make_pair
#define pb emplace_back
#define all(x) (x).begin(),(x).end()
#define mxele *max_element
#define mnele *min_element
#define gsum(l,r) accumulate((l),(r),0)
#define umap unordered_map
#define uset unordered_set
#define prque(a,b) priority_queue <a,vector<a>,b<a>>
#define popc __builtin_popcount
#define lowb lower_bound
#define uppb upper_bound

using namespace std;
bool memory_begin;

namespace fast_io{char buf[1<<12],*p1=buf,*p2=buf,sr[1<<23],z[23],nc;int C=-1,Z=0,Bi=0,ny,precision=19;bool isEOF=0;unsigned long long pw10[20];il bool init_pw10(){pw10[0]=1ull;rep(i,1,19)pw10[i]=pw10[i-1]*10ull;return 1;}il char gc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<12,stdin),p1==p2)?EOF:*p1++;}il int read(){int x=0;ny=1;while(nc=gc(),(nc<48||nc>57)&&nc^EOF)nc==45&&(ny=-1);Bi=1;if(nc<0)return isEOF=1,nc;x=nc-48;while(nc=gc(),47<nc&&nc<58&&nc^EOF)x=(x<<3)+(x<<1)+(nc^48),++Bi;return x*ny;}il void read(int &x){x=read();}il void read(char &x){while(nc=gc(),nc<33&&nc^EOF);nc<0&&(isEOF=1);x=nc;}il void read(pii&a){a.st=read(),a.nd=read();}il void read(double &x){pw10[0]||init_pw10();int a=read(),y=ny,b=(nc!='.')?0:read();x=(b?a+(double)b/pw10[Bi]*y:a);}il void read(string &s){s="";while(nc=gc(),nc<33&&nc^EOF);nc<0&&(isEOF=1);s+=nc;while(nc=gc(),nc>=33)s+=nc;}il signed read(char *s){char *t=s;while(nc=gc(),nc<33&&nc^EOF);nc<0&&(isEOF=1);*s++=nc;while(nc=gc(),nc>=33)*s++=nc;return s-t;}template <typename T,typename ... Args> il void read(T &x, Args &... y) {read(x);read(y...);}il void ot(){fwrite(sr,1,C+1,stdout);C=-1;}il void flush(){if(C>1<<22)ot();}il void pc(char c){sr[++C]=c;flush();}il void write(int x,char t='\0'){int y=0;if(x<0)y=1,x=-x;while(z[++Z]=x%10+48,x/=10);if(y)z[++Z]='-';while(sr[++C]=z[Z],--Z);t=='\0'||(sr[++C]=t);flush();}il void write(char x,char t='\0'){sr[++C]=x,t=='\0'||(sr[++C]=t);flush();}il void write(pii a,char t='\0'){write(a.st,' '),write(a.nd,t);flush();}il void write(double x,char t='\0'){pw10[0]||init_pw10();write((int)x,'.'),write((int)((x-(int)x)*pw10[precision]),t);flush();}il void write(string s,char t='\0'){int l=s.size();rep(i,0,l-1)sr[++C]=s[i];t=='\0'||(sr[++C]=t);flush();}il void write(char *s,char t='\0'){int l=strlen(s);rep(i,0,l-1)sr[++C]=*s++;t=='\0'||(sr[++C]=t);flush();}template <typename T,typename ... Args> il void write(T x, Args ... y){write(x,' ');write(y...);}}
using fast_io::read,fast_io::write;
namespace _{template <typename T> il void r(T*a,int n){rep(i,1,n)read(a[i]);}template <typename T1,typename T2> il void r(T1 *a,T2 *b,int n){rep(i,1,n)read(a[i]),read(b[i]);}template <typename T1,typename T2,typename T3> il void r(T1 *a,T2 *b,T3 *c,int n){rep(i,1,n)read(a[i]),read(b[i]),read(c[i]);}template <typename T> il void r(T*a,int n,int m){rep(i,1,n)rep(j,1,m)read(a[i][j]);}template <typename T> il void r(vector<T>&a,int n){a.resize(n);rep(i,0,n-1)read(a[i]);}template <typename T> il void r(vector<T>*p,int m,bool op){int u,v;rep(i,1,m)read(u,v),p[u].pb(v),op||(p[v].pb(u),1);}template <typename T1,typename T2> il void r(vector<pair<T1,T2>>*p,int m,bool op){int u,v,w;rep(i,1,m)read(u,v,w),p[u].pb(v,w),op||(p[v].pb(u,w),1);}template <typename T> il void w(T*a,int n){rep(i,1,n-1)write(a[i],' ');n&&(write(a[n]),1),write('\n');}template <typename T> il void w(T*a,int n,int m){rep(i,1,n){rep(j,1,m-1)write(a[i][j],' ');m&&(write(a[i][m]),1),write('\n');}}template <typename T> il void w(vector<T>&a){rep(i,0,(int)a.size()-2)write(a[i],' ');!a.empty()&&(write(a.back()),1),write('\n');}}
#define is_debug 1
namespace dbg{template <typename T> il void arr(T*a,int n){if(!is_debug)return;rep(i,1,n-1)cerr<<a[i]<<' ';n&&(cerr<<a[n],1),cerr<<'\n';} template <typename T> il void arr(string s,T *a,int n){if(!is_debug)return;cerr<<s<<" : ";arr(a,n);}template <typename T> il void mat(T*a,int n,int m){if(!is_debug)return;rep(i,1,n){rep(j,1,m-1)cerr<<a[i][j]<<' ';m&&(cerr<<a[i][m],1),cerr<<'\n';}cerr<<'\n';} template <typename T> il void mat(string s,T *a,int n,int m){if(!is_debug)return;cerr<<s<<" :\n";mat(a,n,m);}template <typename T> il void vec(vector<T>a){if(!is_debug)return;rep(i,0,(int)a.size()-2)cerr<<a[i]<<' ';!a.empty()&&(cerr<<a.back(),1),cerr<<'\n';} template <typename T> il void vec(string s,vector <T> a){if(!is_debug)return;cerr<<s<<" : ";vec(a);}template <typename T> il void graV(vector<T>*p,int n){if(!is_debug)return;rep(u,1,n){cerr<<u<<" : ";rep(i,0,(int)p[u].size()-2)cerr<<p[u][i]<<' ';!p[u].empty()&&(cerr<<p[u].back(),1),cerr<<'\n';}cerr<<'\n';} template <typename T> il void graV(string s,vector <T> *p,int n){if(!is_debug)return;cerr<<s<<" :\n";graV(p,n);}template <typename T1,typename T2> il void graV(vector<pair<T1,T2>>*p,int n){if(!is_debug)return;rep(u,1,n){cerr<<u<<" : ";rep(i,0,(int)p[u].size()-2)cerr<<p[u][i].st<<','<<p[u][i].nd<<' ';!p[u].empty()&&(cerr<<p[u].back().st<<','<<p[u].back().nd,1),cerr<<'\n';}cerr<<'\n';} template <typename T1,typename T2> il void graV(string s,vector <pair<T1,T2>> *p,int n){if(!is_debug)return;cerr<<s<<" :\n";graV(p,n);}template <typename T> il void graE(vector<T>*p,int n,bool op){if(!is_debug)return;rep(u,1,n)for(auto v:p[u])(op||u<v)&&(cerr<<u<<' '<<v<<'\n',1);cerr<<'\n';} template <typename T> il void graE(string s,vector <T> *p,int n,bool op){if(!is_debug)return;cerr<<s<<" :\n";graE(p,n,op);}template <typename T1,typename T2> il void graE(vector<pair<T1,T2>>*p,int n,bool op){if(!is_debug)return;rep(u,1,n)for(auto [v,w]:p[u])(op||u<v)&&(cerr<<u<<' '<<v<<' '<<w<<'\n',1);cerr<<'\n';} template <typename T1,typename T2> il void graE(string s,vector <pair<T1,T2>> *p,int n,bool op){if(!is_debug)return;cerr<<s<<" :\n";graE(p,n,op);}}

const int N=50+5,M=6e5+5,V=6e5+5,mod=998244353;
const int dx[10]={0,0,1,0,-1,1,1,-1,-1},dy[10]={0,1,0,-1,0,1,-1,1,-1};
const double eps=1e-9;

mt19937_64 rd(chrono::steady_clock::now().time_since_epoch().count());
il double gtime(){return clock()*1e3/CLOCKS_PER_SEC;}
template <typename T> il void clr(T &x){T().swap(x);}
template <typename T1,typename T2> il T1& add(T1 &a,T2 b){a+=b,a>=0?(a>=mod&&(a-=mod)):(a<-mod?a+=mod<<1:a+=mod);return a;}
template <typename T1,typename T2> il T1& chmax(T1 &a,T2 b){return a<b&&(a=b,1),a;}
template <typename T1,typename T2> il T1& chmin(T1 &a,T2 b){return a>b&&(a=b,1),a;}
il long long mod_(const long long &x){unsigned long long ux=(x>=0?x:-x),r=ux-(__uint128_t(ux)*9920937979283557439ull>>93)*998244353; return x>=0?r:mod-r;}
//il long long mod_(const long long &x){unsigned long long ux=(x>=0?x:-x),r=ux-(__uint128_t(ux)*9903520244958400484ull>>93)*1000000007; return x>=0?r:mod-r;}
//il long long mod_(const long long &x){return x<0?x%mod+mod:x%mod;}

#define multiple_test 0
int __T=1;

const int L=2000+5;
int n;
struct {string s; int c;} a[N];
vector <pii> p[L];
map <string,int> to;

namespace dij
{
	int dis[L],n;
	bitset <L> vis;
	
	il void solve(int _n,int s=1)
	{
		n=_n;
		prque(pii,greater) q; rep(i,0,n+1) dis[i]=inf;
		q.emplace(0,s),dis[s]=0;
		int u;
		while(!q.empty())
		{
			u=q.top().nd,q.pop();
			if(vis[u]) continue;
			vis[u]=1;
			for(auto [v,w]:p[u]) dis[v]>dis[u]+w && (dis[v]=dis[u]+w,q.emplace(dis[v],v),1);
		}
		
//		dbg::arr("dis",dis,n);
	}
}

il void solve(int __Ti)
{
//    double time_begin=gtime();
	
	read(n); rep(i,1,n) read(a[i].s),read(a[i].c);
	
	string tmp; int tot=1;
	rep(i,1,n) to.count(a[i].s) || (to[a[i].s]=++tot);
	rep(i,1,n)
	{
		tmp="";
		rep(j,0,(int)a[i].s.size()-2) tmp+=a[i].s[j],to.count(tmp) || (to[tmp]=++tot);
		tmp="";
		rpe(j,(int)a[i].s.size()-1,1) tmp=a[i].s[j]+tmp,to.count(tmp) || (to[tmp]=++tot);
	}
	
//	cerr<<"to : \n";
//	for(auto [s,id]:to) cerr<<"  "<<id<<" : "<<s<<'\n';
	
	string s,t; bool swap_fl=0; int sl,tl;
	rep(i,1,n) p[1].pb(to[a[i].s],a[i].c);
	for(auto [_s,id]:to)
	{
		s=_s;
		if(s==(tmp=s,reverse(all(tmp)),tmp)) {p[id].pb(tot+1,0); continue;}
		
		rep(i,1,n)
		{
			t=a[i].s;
			s.size()<t.size() && (swap_fl=1,swap(s,t),1);
			reverse(all(t));
			
//			cerr<<"checking... "<<s<<' '<<t<<" | id = "<<id<<" , i = "<<i<<'\n';
			
			if(s==t) p[id].pb(tot+1,a[i].c);//,fprintf(stderr,"case 1 s==t : adde %lld ---> %lld (%lld)\n",id,tot+1,a[i].c);
			else
			{
				sl=s.size(),tl=t.size();
				if(s.find(t)==0) p[id].pb(to[s.substr(tl,sl-tl)],a[i].c);//,fprintf(stderr,"case 2 t is s.pre : adde %lld ---> %lld (%lld)\n",id,to[s.substr(tl,sl-tl)],a[i].c);
				if(s.rfind(t)==sl-tl) p[id].pb(to[s.substr(0,sl-tl)],a[i].c);//,fprintf(stderr,"case 3 t is s.suf : adde %lld ---> %lld (%lld)\n",id,to[s.substr(0,sl-tl)],a[i].c);
			}
			
			reverse(all(t));
			swap_fl && (swap(s,t),swap_fl=0);
		}
	}
	
//	dbg::graE("p",p,tot+1,true);
	
	dij::solve(tot+1);
	write(dij::dis[tot+1]>=inf-712 ? -1ll : dij::dis[tot+1]);
	
//    cerr<<"task "<<__Ti<<" : time = "<<gtime()-time_begin<<" ms\n";
}

il void init()
{
	
}

bool memory_end;
signed main()
{
//    freopen(".in","r",stdin),freopen(".out","w",stdout);
//    ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr);
	fprintf(stderr,"memory = %.3lf MB\n\n",abs(&memory_end-&memory_begin)/1048576.);
	init(); multiple_test&&(read(__T),1);
	rep(__Ti,1,__T) solve(__Ti);
//    int __Ti=0; while(read(n),!fast_io::isEOF) solve(++__Ti);
	fprintf(stderr,"\ntime = %.3Lf ms\n",gtime());
	return fast_io::ot(),0;
}

Submission Info

Submission Time
Task F - Making Palindrome
User little__bug
Language C++ 23 (gcc 12.2)
Score 0
Code Size 9797 Byte
Status WA
Exec Time 7 ms
Memory 4220 KiB

Compile Error

Main.cpp: In function ‘void solve(long long int)’:
Main.cpp:124:46: warning: comparison of integer expressions of different signedness: ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} and ‘long long int’ [-Wsign-compare]
  124 |                                 if(s.rfind(t)==sl-tl) p[id].pb(to[s.substr(0,sl-tl)],a[i].c);//,fprintf(stderr,"case 3 t is s.suf : adde %lld ---> %lld (%lld)\n",id,to[s.substr(0,sl-tl)],a[i].c);
      |                                    ~~~~~~~~~~^~~~~~~
Main.cpp:85:19: warning: unused parameter ‘__Ti’ [-Wunused-parameter]
   85 | il void solve(int __Ti)
      |                   ^

Judge Result

Set Name Sample All after_contest
Score / Max Score 0 / 0 0 / 600 0 / 0
Status
AC × 4
AC × 57
WA × 2
AC × 1
Set Name Test Cases
Sample s1.txt, s2.txt, s3.txt, s4.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, 51.txt, 52.txt, 53.txt, 54.txt, after_contest_01.txt, s1.txt, s2.txt, s3.txt, s4.txt
after_contest after_contest_01.txt
Case Name Status Exec Time Memory
01.txt AC 1 ms 3852 KiB
02.txt AC 1 ms 3764 KiB
03.txt AC 1 ms 3976 KiB
04.txt AC 1 ms 3788 KiB
05.txt AC 2 ms 3884 KiB
06.txt AC 1 ms 3776 KiB
07.txt AC 2 ms 3928 KiB
08.txt AC 1 ms 3820 KiB
09.txt AC 1 ms 3944 KiB
10.txt AC 1 ms 4000 KiB
11.txt AC 1 ms 3880 KiB
12.txt AC 1 ms 3864 KiB
13.txt AC 1 ms 3952 KiB
14.txt AC 1 ms 3928 KiB
15.txt AC 1 ms 3996 KiB
16.txt AC 1 ms 3836 KiB
17.txt AC 1 ms 3900 KiB
18.txt AC 1 ms 4004 KiB
19.txt AC 1 ms 3828 KiB
20.txt AC 2 ms 3884 KiB
21.txt AC 3 ms 3864 KiB
22.txt AC 4 ms 3972 KiB
23.txt AC 4 ms 4084 KiB
24.txt AC 4 ms 3984 KiB
25.txt AC 2 ms 3784 KiB
26.txt AC 2 ms 3920 KiB
27.txt AC 6 ms 4092 KiB
28.txt AC 6 ms 3956 KiB
29.txt AC 7 ms 4000 KiB
30.txt AC 7 ms 4080 KiB
31.txt AC 4 ms 3948 KiB
32.txt AC 5 ms 4052 KiB
33.txt AC 5 ms 4100 KiB
34.txt AC 4 ms 4092 KiB
35.txt AC 5 ms 4032 KiB
36.txt AC 5 ms 4056 KiB
37.txt AC 5 ms 3912 KiB
38.txt AC 5 ms 4004 KiB
39.txt AC 6 ms 4020 KiB
40.txt AC 5 ms 4056 KiB
41.txt AC 5 ms 3992 KiB
42.txt AC 5 ms 4056 KiB
43.txt AC 4 ms 4008 KiB
44.txt AC 3 ms 3996 KiB
45.txt AC 7 ms 4072 KiB
46.txt AC 7 ms 4036 KiB
47.txt AC 7 ms 4128 KiB
48.txt AC 7 ms 4148 KiB
49.txt AC 7 ms 4156 KiB
50.txt AC 7 ms 4220 KiB
51.txt WA 1 ms 3896 KiB
52.txt WA 1 ms 4004 KiB
53.txt AC 1 ms 3904 KiB
54.txt AC 1 ms 3900 KiB
after_contest_01.txt AC 1 ms 3944 KiB
s1.txt AC 1 ms 3896 KiB
s2.txt AC 1 ms 3760 KiB
s3.txt AC 1 ms 3860 KiB
s4.txt AC 1 ms 3900 KiB