撸题

      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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值