結果
| 問題 |
No.1725 [Cherry 3rd Tune D] 無言の言葉
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-11-06 00:35:45 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 167 ms / 4,000 ms |
| コード長 | 1,408 bytes |
| コンパイル時間 | 608 ms |
| コンパイル使用メモリ | 66,176 KB |
| 実行使用メモリ | 44,288 KB |
| 最終ジャッジ日時 | 2024-11-06 17:23:59 |
| 合計ジャッジ時間 | 5,891 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 42 |
コンパイルメッセージ
main.cpp:34:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
34 | main()
| ^~~~
ソースコード
#include<iostream>
using namespace std;
string X,Y;
int Yc[1<<17][26];
int RYc[1<<17][26];
int Xc[1<<17][26];
int RXc[1<<17][26];
int cnt[50][27];
int f(int i,int N,int k,bool rev)
{
if(i==0)
{
return (rev?RXc:Xc)[N][k];
}
if(cnt[i-1][26]>=N)
{
return f(i-1,N,k,false);
}
else if(cnt[i-1][26]+Y.size()>=N)
{
int ret=cnt[i-1][k];
N-=cnt[i-1][26];
ret+=(rev?RYc:Yc)[N][k];
return ret;
}
else
{
int ret=cnt[i-1][k]+Yc[Y.size()][k];
N-=cnt[i-1][26]+Y.size();
ret+=f(i-1,N,k,true);
return ret;
}
}
main()
{
cin>>X>>Y;
for(int i=0;i<X.size();i++)
{
for(int j=0;j<26;j++)
{
Xc[i+1][j]=Xc[i][j];
}
Xc[i+1][X[i]-'a']++;
}
for(int i=0;i<X.size();i++)
{
for(int j=0;j<26;j++)
{
RXc[i+1][j]=RXc[i][j];
}
RXc[i+1][X[X.size()-i-1]-'a']++;
}
for(int i=0;i<Y.size();i++)
{
for(int j=0;j<26;j++)
{
Yc[i+1][j]=Yc[i][j];
}
Yc[i+1][Y[i]-'a']++;
}
for(int i=0;i<Y.size();i++)
{
for(int j=0;j<26;j++)
{
RYc[i+1][j]=RYc[i][j];
}
RYc[i+1][Y[Y.size()-i-1]-'a']++;
}
for(int j=0;j<26;j++)cnt[0][j]=Xc[X.size()][j];
cnt[0][26]=X.size();
int mx=1;
for(;;)
{
int i=mx;
for(int j=0;j<27;j++)
{
cnt[i][j]=cnt[i-1][j]*2+(j<26?Yc[Y.size()][j]:Y.size());
}
if(cnt[i][26]>=(int)1e9)break;
mx++;
}
int Q;cin>>Q;
for(;Q--;)
{
int l,r;char c;
cin>>l>>r>>c;
int op=c-'a';
cout<<f(mx,r,op,false)-f(mx,l-1,op,false)<<endl;
}
}