专栏文章

题解:P10852 【MX-X2-T1】「Cfz Round 4」Awaken

P10852题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mingl3yo
此快照首次捕获于
2025/12/02 02:04
3 个月前
此快照最后确认于
2025/12/02 02:04
3 个月前
查看原文
这个一道可癌的数学题。

思路

考虑题目中的等式 x2+x3=x1+x4x_{2} + x_{3} = x_{1} + x_{4} 可以转换成 x2x4=x1x3x_{2} - x_{4} = x_{1} - x_{3},而 ax2+ax3=ax1+ax4a_{x_{2}} + a_{x_{3}} = a_{x_{1}} + a_{x_{4}} 可以转化成 ax2ax4=ax1ax3a_{x_{2}} - a_{x_{4}} = a_{x_{1}} - a_{x_{3}},也就是题目的要求变为了这个序列是等差序列。
那么我们只需要判断这个序列在满足题目给出的特定位置上是特定值的条件的情况下是否可以是等差序列即可。
时间复杂度 O(Tm)O(Tm)

Code

CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
struct node{
	int p,x;
} dat[N];
int Q,n,m;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> Q;
	while(Q --){
		cin >> n >> m;
		for(int i = 1;i <= m;i ++){
			cin >> dat[i].p >> dat[i].x;
		}
		if(m <= 1){
			cout << "Yes\n";
			continue;
		}
		sort(dat + 1,dat + m + 1,[](node a,node b){
			return a.p < b.p;
		});
		int x = (dat[2].x - dat[1].x) / (dat[2].p - dat[1].p);
		bool flag = true;
		for(int i = 2;i <= m;i ++){
			if(dat[i].x - dat[i - 1].x != x * (dat[i].p - dat[i - 1].p)){
				flag = false;
				break;
			}
		}
		cout << (flag == true ? "Yes\n" : "No\n");
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...