Submission #35779478
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
using mint = atcoder::modint998244353;
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
#define per(i,a,n) for (ll i=n;i-->(ll)a;)
ll read(){ll r;scanf("%lld",&r);return r;}
vector<string> ss;
char t[500010];
int main(){
int n = read();
int sz=0;
rep(i,0,n){
scanf("%s",t);
sz=max(sz,(int)strlen(t));
ss.push_back(t);
}
vector<mint>ans(n,1); // 1-index
vector<vector<int>> g = {{}};
rep(i,0,n)g[0].push_back(i);
rep(j,0,sz){
vector<vector<int>> nextg = {};
for(auto &idx:g){ // idx 前j位一样, 从第j位开始比
vector<vector<int> > ch2idx('z'-'a'+2); // 空, 'a', .. ,'z'
for(auto i:idx){
if((int)ss[i].size() == j) ch2idx[0].push_back(i);
else ch2idx[ss[i][j]-'a'+1].push_back(i);
}
// 空 + (all-空-cur)/2 = (all+空-cur)/2
for(auto i:idx)if((int)ss[i].size()!=j)ans[i] += mint(idx.size()+ch2idx[0].size()-ch2idx[ss[i][j]-'a'+1].size())/2;
rep(i,0,'z'-'a'+2)if(ch2idx[i].size()>1)nextg.push_back(ch2idx[i]);
}
g=nextg;
}
for(auto v:ans)printf("%d\n",v.val());
return 0;
}
// n个 小写字母 字符串
// 字典序得到学号
//
// 但是 是按照 a-z 的一个排列p 来决定 字典序大小, 而不是默认的
//
// 计算每个学生学号期望值
// 两两不同
//
// 5e5
// 估计<= 141310 人
//
// A < B , 前缀相同, 'ch0' < 'ch1', 或A更短
// A > B , 前缀相同, 'ch0' > 'ch1', 或B更短
Submission Info
Submission Time |
|
Task |
G - Random Student ID |
User |
cromarmot |
Language |
C++ (GCC 9.2.1) |
Score |
600 |
Code Size |
1520 Byte |
Status |
AC |
Exec Time |
108 ms |
Memory |
10736 KiB |
Compile Error
./Main.cpp: In function ‘ll read()’:
./Main.cpp:10:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
10 | ll read(){ll r;scanf("%lld",&r);return r;}
| ~~~~~^~~~~~~~~~~
./Main.cpp: In function ‘int main()’:
./Main.cpp:20:10: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
20 | scanf("%s",t);
| ~~~~~^~~~~~~~
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
600 / 600 |
Status |
|
|
Set Name |
Test Cases |
Sample |
example0.txt, example1.txt |
All |
000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, example0.txt, example1.txt |
Case Name |
Status |
Exec Time |
Memory |
000.txt |
AC |
67 ms |
4284 KiB |
001.txt |
AC |
61 ms |
4300 KiB |
002.txt |
AC |
2 ms |
3576 KiB |
003.txt |
AC |
99 ms |
10736 KiB |
004.txt |
AC |
95 ms |
9792 KiB |
005.txt |
AC |
12 ms |
4180 KiB |
006.txt |
AC |
7 ms |
4204 KiB |
007.txt |
AC |
6 ms |
4200 KiB |
008.txt |
AC |
6 ms |
4196 KiB |
009.txt |
AC |
64 ms |
4268 KiB |
010.txt |
AC |
65 ms |
4248 KiB |
011.txt |
AC |
62 ms |
4284 KiB |
012.txt |
AC |
108 ms |
8380 KiB |
013.txt |
AC |
91 ms |
4696 KiB |
014.txt |
AC |
83 ms |
4392 KiB |
015.txt |
AC |
78 ms |
4156 KiB |
016.txt |
AC |
95 ms |
9900 KiB |
017.txt |
AC |
100 ms |
9956 KiB |
018.txt |
AC |
90 ms |
9432 KiB |
019.txt |
AC |
87 ms |
9696 KiB |
020.txt |
AC |
84 ms |
9168 KiB |
021.txt |
AC |
85 ms |
9164 KiB |
022.txt |
AC |
78 ms |
8740 KiB |
023.txt |
AC |
80 ms |
8584 KiB |
024.txt |
AC |
76 ms |
8480 KiB |
025.txt |
AC |
75 ms |
8212 KiB |
example0.txt |
AC |
7 ms |
3628 KiB |
example1.txt |
AC |
2 ms |
3672 KiB |