結果
| 問題 |
No.515 典型LCP
|
| コンテスト | |
| ユーザー |
LayCurse
|
| 提出日時 | 2017-05-05 22:36:51 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,824 bytes |
| コンパイル時間 | 1,573 ms |
| コンパイル使用メモリ | 167,044 KB |
| 実行使用メモリ | 148,992 KB |
| 最終ジャッジ日時 | 2024-09-14 08:51:57 |
| 合計ジャッジ時間 | 6,038 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 2 |
| other | TLE * 1 -- * 14 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
void rd(int &x){
int k, m=0;
x=0;
for(;;){
k = getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
void rd(long long &x){
int k, m=0;
x=0;
for(;;){
k = getchar_unlocked();
if(k=='-'){
m=1;
break;
}
if('0'<=k&&k<='9'){
x=k-'0';
break;
}
}
for(;;){
k = getchar_unlocked();
if(k<'0'||k>'9'){
break;
}
x=x*10+k-'0';
}
if(m){
x=-x;
}
}
int rd(char c[]){
int i, sz=0;
for(;;){
i = getchar_unlocked();
if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
break;
}
}
c[sz++] = i;
for(;;){
i = getchar_unlocked();
if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){
break;
}
c[sz++] = i;
}
c[sz]='\0';
return sz;
}
void wt_L(long long x){
char f[20];
int m=0, s=0;
if(x<0){
m=1;
x=-x;
}
while(x){
f[s++]=x%10;
x/=10;
}
if(!s){
f[s++]=0;
}
if(m){
putchar_unlocked('-');
}
while(s--){
putchar_unlocked(f[s]+'0');
}
}
template<class S, class T> inline S min_L(S a,T b){
return a<=b?a:b;
}
char *S[100000], mem[1000000];
int M, N, len[100000];
long long d, x;
map< pair<int,int>,int > mp;
int main(){
int i, j, k, m, mx, s=0;
long long res=0;
pair<int,int> ij;
rd(N);
for(i=0;i<N;i++){
S[i] = mem+s;
len[i] = rd(&mem[s]);
s += len[i];
}
rd(M);
rd(x);
rd(d);
for(k=0;k<M;k++){
i = x / (N-1);
j = x % (N-1);
if(i > j){
swap(i,j);
}
else{
j++;
}
x = (x+d) % (N*(N-1));
ij = make_pair(i,j);
if(mp.count(ij)){
res += mp[ij];
continue;
}
mx =min_L(len[i], len[j]);
for(m=0;m<mx;m++){
if(S[i][m] != S[j][m]){
break;
}
}
mp[ij] = m;
res += m;
}
wt_L(res);
putchar_unlocked('\n');
return 0;
}
// cLay varsion 20170505-3
// --- original code ---
// int N;
// char *S[100000], mem[1000000];
// int len[100000];
// int M; ll x, d;
//
// map< pair<int,int>,int > mp;
//
// {
// int i, j, k, m, mx, s = 0;
// pair<int,int> ij;
// ll res = 0;
//
// rd(N);
// rep(i,N){
// S[i] = mem+s;
// rd(&mem[s]@len[i]);
// s += len[i];
// }
//
// rd(M,x,d);
// rep(k,M){
// i = x / (N-1);
// j = x % (N-1);
// if(i > j) swap(i,j); else j++;
// x = (x+d) % (N*(N-1));
//
// ij = make_pair(i,j);
// if(mp.count(ij)){
// res += mp[ij];
// continue;
// }
//
// mx = min(len[i],len[j]);
// rep(m,mx) if(S[i][m] != S[j][m]) break;
// mp[ij] = m;
// res += m;
// }
//
// wt(res);
// }
LayCurse