Your browser is not supported. Please, update your browser or switch to a different one. Learn more about which browsers are supported.
Task description
Winter is coming and Victor is going to buy some new lights. In the store, lights are available in 10 colors, numbered from 0 to 9. They are connected together in a huge chain. Victor can choose any single segment of the chain and buy it.
This task would be easy if it weren't for Victor's ambition. He wants to outdo his neighbors with some truly beautiful lights, so the chain has to look the same from both its left and right sides (so that both neighbors see the same effect).
Victor is a mechanic, so after buying a segment of the chain, he can rearrange its lights in any order he wants. However, now he has to buy a chain segment that will satisfy above condition when its lights are reordered. Can you compute how many possible segments he can choose from?
Write a function:
function solution($S);
that, given a description of the chain of lights, returns the number of segments that Victor can buy modulo 1,000,000,007. The chain is represented by a string of digits (characters from '0' to '9') of length N. The digits represent the colors of the lights. Victor can only buy a segment of the chain in which he can reorder the lights such that the chain will look identical from both the left and right sides (i.e. when reversed).
For example, given:
S = "02002"the function should return 11. Victor can buy the following segments of the chain:
"0", "2", "0", "0", "2", "00", "020", "200", "002", "2002", "02002"Note that a segment comprising a single "0" is counted three times: first it describes the subchain consisting of only the first light, then the subchain consisting of the third light and finally the subchain consisting of the fourth light. Also note that Victor can buy the whole chain ("02002"), as, after swapping the first two lights, it would become "20002", which is the same when seen from both from left and right.
Write an efficient algorithm for the following assumptions:
- string S is made only of digits (0−9);
- the length of string S is within the range [1..200,000].
Task timeline
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
if (check(substr($S,$j,$i)) $n++;
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=1;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Parse error: syntax error, unexpected '$n' (T_VARIABLE) in func.php on line 10 Parse error: syntax error, unexpected '$n' (T_VARIABLE) in func.php on line 10
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
if (check(substr($S,$j,$i))) $n++;
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=1;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
if (check(substr($S,$j,$i))) $n++;
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 20 Notice: Undefined offset: 0 in /tmp/exec.php on line 20 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 20 Notice: Undefined offset: 2 in /tmp/exec.php on line 20
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
if (check(substr($S,$j,$i))) $n++;
}
}
return $n;
}
function check($S) {
echo strlen($S);
$keys=[];
for($a=0;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22stdout:
222334
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) { echo $r."/n";$n++;}
}
}
return $n;
}
function check($S) {
echo strlen($S);
$keys=[];
for($a=0;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23stdout:
2221/n31/n31/n4
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) { echo $r."<br>";$n++;}
}
}
return $n;
}
function check($S) {
echo strlen($S);
$keys=[];
for($a=0;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 23 Notice: Undefined offset: 0 in /tmp/exec.php on line 23 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 23 Notice: Undefined offset: 2 in /tmp/exec.php on line 23stdout:
2221<br>31<br>31<br>4
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) { echo $r."<br>";$n++;}
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22stdout:
1<br>1<br>1<br>
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) { echo substr($S,$j,$i)."<br>";$n++;}
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 0 in /tmp/exec.php on line 22 Notice: Undefined offset: 0 in /tmp/exec.php on line 22 PHP Notice: Undefined offset: 2 in /tmp/exec.php on line 22 Notice: Undefined offset: 2 in /tmp/exec.php on line 22stdout:
00<br>020<br>200<br>
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
echo "test =".substr($S,$j,$i)."|";
$r=check(substr($S,$j,$i));
if ($r) { echo substr($S,$j,$i)."K";$n++;}
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
test =02|test =20|test =00|00Ktest =020|020Ktest =200|200Ktest =0200|
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
echo "test =".substr($S,$j,$i)."|";
$r=check(substr($S,$j,$i));
if ($r) { echo "OK";$n++;}
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
test =02|test =20|test =00|OKtest =020|OKtest =200|OKtest =0200|
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<=strlen($S);$i++) {
for($j=0;$j<strlen($S)-$i;$j++) {
echo "test =".substr($S,$j,$i)."|";
$r=check(substr($S,$j,$i));
if ($r) { echo "OK";$n++;}
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
test =02|test =20|test =00|OKtest =020|OKtest =200|OKtest =0200|
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<=strlen($S);$i++) {
for($j=0;$j<=strlen($S)-$i;$j++) {
echo "test =".substr($S,$j,$i)."|";
$r=check(substr($S,$j,$i));
if ($r) { echo "OK";$n++;}
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
test =02|test =20|test =00|OKtest =02|test =020|OKtest =200|OKtest =002|OKtest =0200|test =2002|OKtest =02002|OK
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<=strlen($S);$i++) {
for($j=0;$j<=strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) $n++;
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<=strlen($S);$i++) {
for($j=0;$j<=strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) $n++;
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<=strlen($S);$i++) {
for($j=0;$j<=strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) $n++;
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($S) {
// write your code in PHP7.0
$n=strlen($S);
for($i=2;$i<=strlen($S);$i++) {
for($j=0;$j<=strlen($S)-$i;$j++) {
$r=check(substr($S,$j,$i));
if ($r) $n++;
}
}
return $n;
}
function check($S) {
$keys=[];
for($a=0;$a<strlen($S);$a++) {
@$keys[substr($S,$a,1)]++;
}
$notPaired=0;
foreach($keys as $a) {
if (($a & 1)==1) $notPaired++;
}
return $notPaired<2;
}
The following issues have been detected: timeout errors.
big correctness tests (length = 300)
running time: 0.63 sec., time limit: 0.10 sec.
big correctness tests (length = 1000)
running time: >6.00 sec., time limit: 0.10 sec.
large correctness tests (length = 50 000)
running time: >6.00 sec., time limit: 0.24 sec.
max correctness tests (length = 200 000)
running time: >6.00 sec., time limit: 0.67 sec.
tests with increasing value of N and varying alphabet size
running time: >6.00 sec., time limit: 0.15 sec.
tests detecting lack of int64 in solutions
running time: >6.00 sec., time limit: 0.67 sec.
tests introducting special words, e.g. Fibonacci, Thue-Morse, Gray codes
running time: >6.00 sec., time limit: 0.67 sec.