1,现在有一个字符串,你要对这个字符串进行 n 次操作,每次操作给出两个数字:(p, l) 表示当前字符串中从下标为 p 的字符开始的长度为 l 的一个子串。你要将这个子串左右翻转后插在这个子串原来位置的正后方,求最后得到的字符串是什么。字符串的下标是从 0 开始的,你可以从样例中得到更多信息。
每组测试用例仅包含一组数据,每组数据第一行为原字符串,长度不超过 10 ,仅包含大小写字符与数字。接下来会有一个数字 n 表示有 n 个操作,再接下来有 n 行,每行两个整数,表示每次操作的(p , l)。
保证输入的操作一定合法,最后得到的字符串长度不超过 1000。
<?php
class GetNewString {
private $str;
private $strl_len;
private $str_limit_start;
private $str_limit_end;
public function __construct($str, $str_limit_start = 10, $str_limit_end = 1000) {
$this->str = $str;
$this->strl_len = (int)strlen($str);
$this->str_limit_start = $str_limit_start;
$this->str_limit_end = $str_limit_end;
if($this->strl_len > 10) {
$this->showErrorMessge("字符串长度不能大于 " . $str_limit_start);
}
}
public function run($limits) {
foreach ($limits as $key => $value) {
$this->operation((int)$value[0], (int)$value[1]);
}
return $this->str;
}
public function operation($start, $len) {
if(($len + $this->strl_len) > $this->str_limit_end) {
$this->showErrorMessge("字符串长度不能大于 " . $str_limit_end);
}
if(($start + $len) > $this->strl_len) {
$this->showErrorMessge("参数错误");
}
$str = strrev(substr($this->str, $start, $len));
$this->str = substr($this->str, 0, $start + $len) . $str . substr($this->str, $start + $len);
}
protected function showErrorMessge($msg) {
echo $msg . "\n";
exit();
}
}
$handle = fopen("php://stdin", "r");
$str = fgets($handle);
$times = fgets($handle);
$sub_arr = array();
for($i = 0; $i < $times; $i++){
$temp = fgets($handle);
$sub_arr[] =explode(" ", $temp);
}
$a = new GetNewString($str);
$res = $a->run($sub_arr);
echo $res . "\n";
fclose($handle);
2,你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?
每组测试用例仅包含一组数据,每组数据第一行为三个正整数 n, s, L。 保证 n ≤ 100 , s ≤ L ≤ 10000