Codeforces Round 943 (Div. 3)

五一摆五天 状态下滑场(小丑场)
A. Maximize?

这次的签到题终于和以往的风格不一样了
给定 找到g(x,y)+y 中最大的y
gcd欧几里得算法
暴力枚举1~x-1

#include <iostream>
using namespace std;

int gcd(int a, int b) {
	return b ? gcd(b, a % b) : a;
}

int main(void) {
	int T;
	cin >> T;
	while (T--) {
		int n;
		cin >> n;
		int res = 0;
		int y = 0;
		for (int i = 1; i < n; i++) {
			if (gcd(n, i) + i > res) {
				res = gcd(n, i) + i;
				y = i;
			}
		}

		cout << y << endl;
	}

	return 0;

}

B. Prefiquence

在这里插入图片描述
B题双指针匹配
在这里插入图片描述在这里插入图片描述

比赛时就做出了这两题 甚至连思路也是莫名其妙的

重头戏在T3 写了快1小时 还是写不出 真的很小丑
这里就来复盘一下C题吧,没写到的题以后再说(目前还是缺很多东西,补题的话目前的计划是
补看了题目没思路的 或者有一点点感觉又写不出的QAQ)

C. 通过余数进行组装

每次测试的时间限制:2 秒

每次测试的内存限制:256 兆字节

输入:标准输入

输出:标准输出
系统会给出一个数组 x 2 , x 3 , … , x n x_2,x_3,\dots,x_n x2x3xn。您的任务是查找 any 数组 a 1 , … , a n a_1,\dots,a_n a1an,其中:

  • 1 ≤ a i ≤ 1 0 9 1\le a_i\le 10^9 1ai109 所有 1 ≤ i ≤ n 1\le i\le n 1in
  • x i = a i   m o d   a i − 1 x_i=a_i \bmod a_{i-1} xi=aimodai1 对于所有 2 ≤ i ≤ n 2\le i\le n 2in

这里 c   m o d   d c\bmod d cmodd 表示整数 c c c 除以整数 d d d 的余数。例如, 5   m o d   2 = 1 5 \bmod 2 = 1 5mod2=1 72   m o d   3 = 0 72 \bmod 3 = 0 72mod3=0 143   m o d   14 = 3 143 \bmod 14 = 3 143mod14=3

**请注意,如果有多个满足该语句的 a a a,您可以找到任何。
输入

第一行包含一个整数 t t t ( 1 ≤ t ≤ 1 0 4 ) (1\le t\le 10^4) 1t104 — 测试用例的数量。

每个测试用例的第一行包含一个整数 n n n ( 2 ≤ n ≤ 500 ) (2\le n\le 500) 2n500 a a a 中的元素数。

每个测试用例的第二行包含 n − 1 n-1 n1 整数 x 2 , … , x n x_2,\dots,x_n x2xn ( 1 ≤ x i ≤ 500 ) (1\le x_i\le 500) 1xi500 x x x 的元素。

保证所有测试用例的值 n n n 的总和不超过 2 ⋅ 1 0 5 2 \cdot 10^5 2105
输出

对于每个测试用例,输出满足语句的任何 a 1 , … , a n a_1,\dots,a_n a1an 1 ≤ a i ≤ 1 0 9 1 \le a_i \le 10^9 1ai109)。
注意

在第一个测试用例中, a = [ 3 , 5 , 4 , 9 ] a=[3,5,4,9] a=[3,5,4,9] 满足条件,因为:

  • a 2   m o d   a 1 = 5   m o d   3 = 2 = x 2 a_2\bmod a_1=5\bmod 3=2=x_2 a2moda1=5mod3=2=x2;
  • a 3   m o d   a 2 = 4   m o d   5 = 4 = x 3 a_3\bmod a_2=4\bmod 5=4=x_3 a3moda2=4mod5=4=x3;
  • a 4   m o d   a 3 = 9   m o d   4 = 1 = x 4 a_4\bmod a_3=9\bmod 4=1=x_4 a4moda3=9mod4=1=x4;

在这里插入图片描述

这题是开放题 应该叫做构造? 就是满足条件的答案就可以通过

题目的意思是给定一个长度为n-1的x数组,求解出长度为n的a数组
其中
在这里插入图片描述
用例:
在这里插入图片描述

这题的正确思路是: 从mod的性质下手:
a mod b =r (r∈1~b-1)
观察式子可以发现 余数一定比除数小
这是我们发现的第一点性质

我们现在只知道余数(x数组)
那么不妨就设定
a1=x2+1
这样 a1即是除数b满足大于x2
那么假设知道除数b了
被除数就要根据进一步分解的式子求得:
a mod b = r
a - k*b = r

a = k*b+r
由于a又作为下一个的b
所以保证a 大于下一处的r即可

#include <iostream>
using namespace std;
const int N = 510;
typedef long long LL;
int a[N], x[N];



int main(void) {
	int T;
	cin >> T;
	while (T--) {
		int n;
		cin >> n;

		for (int i = 2; i <= n; i++) {
			cin >> x[i];
		}
		a[1] = x[2] + 2;//初始化 大于x2即可

		for (int i = 2; i <= n; i++) {

			a[i] = a[i - 1] + x[i];//默认k=1
			while (a[i] <= x[i + 1])//a[i] 作为x[i+1]的b
				a[i] += a[i - 1];//调整K

		}


		for (int i = 1; i <= n; i++)
			cout << a[i] << ' ';
		puts("");


	}


	return 0;

}

其实就差一点 我就写出来了 我只知道式子和展开 但是我不会分析 还是得多思考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值