Submission #50473785
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)(n);i++)
ll read(){ll r;scanf("%lld",&r);return r;}
const int N=500000;
char s[N+10];
vector<int> ch[N+10];
int subcycle(const string&t){
int sz=t.size();
for(auto i:ch[sz]) {
assert(i < sz and sz%i == 0);
bool cycle = true;
rep(j,0,sz) if(t[j] != t[j%i]) {cycle = false;};
if(cycle) return i;
}
return t.size();
}
template<class T>
T reverse(const T &a){
int sz=size(a);
T ret;
rep(i,0,sz) ret.push_back(a[sz-1-i]);
return ret;
}
vector<bool> cut(const string&t){ // [sz-1] = 是否 最小循环长度==长度
int sz=t.size();
assert(sz>=2);
vector<int> cyc(sz,0); // cyc[长度]=最小循环节
iota(begin(cyc),end(cyc),1);
rep(i,1,sz) {
for(int l:ch[i+1]) {
if(l == cyc[i-l]){// 需要 l % cyc[i-l], 但是如果 cyc[i-l] 更小且 下面相等,那么应该有更小的周期
bool ok = true;
rep(j,0,l) if(t[j] != t[i+1-l+j]) {
ok = false;
break;
}
if(ok) {
cyc[i]=l;
break;
}
}
}
}
vector<bool> ret(sz,0); // ret[长度]=最小循环节
rep(i,0,sz) ret[i] = cyc[i]==i+1;
return ret;
}
int main(){
rep(i,1,N+1) rep(j,2,N+1) {
if(i*j > N) break;
ch[i*j].push_back(i);
}
scanf("%s",s);
int sz = strlen(s);
if(sz == 1) {
printf("1\n1\n");
return 0;
}
string s0;
rep(i,0,sz) s0.push_back(s[i]);
int i = subcycle(s0);
if(i == sz) {
printf("1\n1\n");
}else if(i == 1) {
printf("%d\n1\n",sz);
}else{
if(sz/i > 2) {
int ways = (sz/i-2)*(i-1); // 中间的非两段
for(auto w:cut(s0.substr(0,i))) ways+=w;
for(auto w:cut(reverse(s0.substr(sz-i,i)))) ways+=w;
printf("2\n%d\n",ways-2); // 刚好等于的时候
}else{
int ways = 0; // 只能切成2段
auto w0 = cut(s0);
auto w1 = reverse(cut(reverse(s0)));
rep(i,0,sz-1) ways += w0[i] and w1[i+1];
printf("2\n%d\n",ways);
}
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Best Representation |
| User | cromarmot |
| Language | C++ 20 (gcc 12.2) |
| Score | 900 |
| Code Size | 2060 Byte |
| Status | AC |
| Exec Time | 330 ms |
| Memory | 63280 KiB |
Compile Error
Main.cpp: In function ‘ll read()’:
Main.cpp:5:21: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
5 | ll read(){ll r;scanf("%lld",&r);return r;}
| ~~~~~^~~~~~~~~~~
Main.cpp: In function ‘int main()’:
Main.cpp:57:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
57 | scanf("%s",s);
| ~~~~~^~~~~~~~
Judge Result
| Set Name | Sample | Subtask1 | All | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 400 / 400 | 500 / 500 | ||||||
| Status |
|
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example_01.txt, example_02.txt, example_03.txt |
| Subtask1 | example_01.txt, example_02.txt, example_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt, subtask1_30.txt, subtask1_31.txt, subtask1_32.txt, subtask1_33.txt |
| All | example_01.txt, example_02.txt, example_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt, subtask1_30.txt, subtask1_31.txt, subtask1_32.txt, subtask1_33.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask2_16.txt, subtask2_17.txt, subtask2_18.txt, subtask2_19.txt, subtask2_20.txt, subtask2_21.txt, subtask2_22.txt, subtask2_23.txt, subtask2_24.txt, subtask2_25.txt, subtask2_26.txt, subtask2_27.txt, subtask2_28.txt, subtask2_29.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| example_01.txt | AC | 209 ms | 59344 KiB |
| example_02.txt | AC | 193 ms | 59184 KiB |
| example_03.txt | AC | 225 ms | 59364 KiB |
| subtask1_01.txt | AC | 205 ms | 59376 KiB |
| subtask1_02.txt | AC | 208 ms | 59148 KiB |
| subtask1_03.txt | AC | 206 ms | 59372 KiB |
| subtask1_04.txt | AC | 216 ms | 59204 KiB |
| subtask1_05.txt | AC | 216 ms | 59204 KiB |
| subtask1_06.txt | AC | 206 ms | 59176 KiB |
| subtask1_07.txt | AC | 216 ms | 59240 KiB |
| subtask1_08.txt | AC | 226 ms | 59256 KiB |
| subtask1_09.txt | AC | 200 ms | 59172 KiB |
| subtask1_10.txt | AC | 198 ms | 59292 KiB |
| subtask1_11.txt | AC | 202 ms | 59236 KiB |
| subtask1_12.txt | AC | 220 ms | 59192 KiB |
| subtask1_13.txt | AC | 199 ms | 59416 KiB |
| subtask1_14.txt | AC | 218 ms | 59196 KiB |
| subtask1_15.txt | AC | 209 ms | 59144 KiB |
| subtask1_16.txt | AC | 218 ms | 59144 KiB |
| subtask1_17.txt | AC | 205 ms | 59164 KiB |
| subtask1_18.txt | AC | 200 ms | 59184 KiB |
| subtask1_19.txt | AC | 213 ms | 59344 KiB |
| subtask1_20.txt | AC | 208 ms | 59160 KiB |
| subtask1_21.txt | AC | 211 ms | 59200 KiB |
| subtask1_22.txt | AC | 211 ms | 59288 KiB |
| subtask1_23.txt | AC | 201 ms | 59180 KiB |
| subtask1_24.txt | AC | 212 ms | 59180 KiB |
| subtask1_25.txt | AC | 205 ms | 59212 KiB |
| subtask1_26.txt | AC | 209 ms | 59376 KiB |
| subtask1_27.txt | AC | 202 ms | 59264 KiB |
| subtask1_28.txt | AC | 221 ms | 59392 KiB |
| subtask1_29.txt | AC | 212 ms | 59356 KiB |
| subtask1_30.txt | AC | 202 ms | 59180 KiB |
| subtask1_31.txt | AC | 221 ms | 59348 KiB |
| subtask1_32.txt | AC | 218 ms | 59204 KiB |
| subtask1_33.txt | AC | 209 ms | 59208 KiB |
| subtask2_01.txt | AC | 268 ms | 62276 KiB |
| subtask2_02.txt | AC | 211 ms | 60284 KiB |
| subtask2_03.txt | AC | 203 ms | 60280 KiB |
| subtask2_04.txt | AC | 220 ms | 60212 KiB |
| subtask2_05.txt | AC | 214 ms | 60332 KiB |
| subtask2_06.txt | AC | 279 ms | 60256 KiB |
| subtask2_07.txt | AC | 262 ms | 60284 KiB |
| subtask2_08.txt | AC | 273 ms | 60268 KiB |
| subtask2_09.txt | AC | 330 ms | 63128 KiB |
| subtask2_10.txt | AC | 318 ms | 63112 KiB |
| subtask2_11.txt | AC | 322 ms | 63280 KiB |
| subtask2_12.txt | AC | 321 ms | 63076 KiB |
| subtask2_13.txt | AC | 208 ms | 60264 KiB |
| subtask2_14.txt | AC | 240 ms | 60228 KiB |
| subtask2_15.txt | AC | 211 ms | 60232 KiB |
| subtask2_16.txt | AC | 212 ms | 60208 KiB |
| subtask2_17.txt | AC | 223 ms | 60280 KiB |
| subtask2_18.txt | AC | 216 ms | 60336 KiB |
| subtask2_19.txt | AC | 300 ms | 63224 KiB |
| subtask2_20.txt | AC | 314 ms | 63156 KiB |
| subtask2_21.txt | AC | 248 ms | 60248 KiB |
| subtask2_22.txt | AC | 211 ms | 60188 KiB |
| subtask2_23.txt | AC | 232 ms | 60396 KiB |
| subtask2_24.txt | AC | 216 ms | 59808 KiB |
| subtask2_25.txt | AC | 232 ms | 59908 KiB |
| subtask2_26.txt | AC | 273 ms | 60036 KiB |
| subtask2_27.txt | AC | 255 ms | 59892 KiB |
| subtask2_28.txt | AC | 215 ms | 59616 KiB |
| subtask2_29.txt | AC | 287 ms | 62196 KiB |