首页 > 其他分享 >洛谷 P10852 Awaken——题解

洛谷 P10852 Awaken——题解

时间:2024-08-10 18:49:52浏览次数:13  
标签:le 洛谷 题解 样例 测试数据 Downarrow 序列 Yes Awaken

洛谷P10852题解


传送锚点


摸鱼环节

【MX-X2-T1】「Cfz Round 4」Awaken

题目背景

能否等到梦醒了的时候。

图片与题目做法无关,图片来源网络,侵删

题目描述

月做了一个梦。在梦中,她拿到了一个长度为 \(n\) 的整数序列 \(a_1, \ldots, a_n\),其中 \(\bm{n \ge 5}\)

梦醒了。月忘记了这个序列中的一部分元素,留下了空白。所幸,月还记得 \(m\) 个非空白的位置。月希望将空白的位置填上,还原整个序列。

月还记得梦中的序列有性质:对于所有满足 \(x_2+x_3=x_1+x_4\) 的互异下标 \(x_1,x_2,x_3,x_4\),总有 \(a_{x_2}+a_{x_3}=a_{x_1}+a_{x_4}\) 成立。

月想知道是否可以还原出一个满足性质的序列(如果不能的话,就是她记错了)。若可以,输出 Yes;否则输出 No

输入格式

本题有多组测试数据。

输入的第一行包含一个整数 \(T\),表示测试数据组数。

接下来依次输入每组测试数据。对于每组测试数据:

  • 第一行两个整数 \(n,m\),其中 \(n \ge 5\),\(m\) 表示 \(a_i\) 中不为空的位置的个数。
  • 接下来 \(m\) 行,每行两个整数 \(p_i,x_i\),表示 \(a_{p_i}\) 不为空,且 \(a_{{p_i}}=x_i\)。保证 \(p_i\) 两两不同。

输出格式

对于每组测试数据,输出一个字符串 YesNo,表示原序列是否存在。

本题中字符串大小写不敏感,即 yesyeSyEsYesYEsYeSyESYES 都被认为是 YesNo 同理。

样例 #1

样例输入 #1

3
5 3
1 1
4 4
5 5
6 6
1 1
3 7
2 4
5 5
4 1
6 4
5 0

样例输出 #1

Yes
No
Yes

样例 #2

样例输入 #2

1
5 2
1 -2
5 -10

样例输出 #2

Yes

样例 #3

样例输入 #3

2
9 6
1 -856675560
8 479857596
5 -92942328
4 -283875636
3 -474808944
9 670790904
10 7
4 -32297373
10 -633066970
9 831032854
5 -43726758
2 -699796467
1 -918486370
8 612342951

样例输出 #3

Yes
No

提示

【样例解释 #1】

对于第 \(1\) 组测试数据,当前序列为 \([1,?,?,4,5]\)。可以构造出原序列 \([1,2,3,4,5]\),你可以检查此序列满足性质。

对于第 \(2\) 组测试数据,当前序列为 \([1,4,7,1,5,4]\)。可以证明不存在满足性质的原序列。这组样例提醒你,\(\bm p\) 不一定升序给出

对于第 \(3\) 组测试数据,当前序列为 \([?,?,?,?,?]\)。可以构造出原序列 \([0,0,0,0,0]\),当然 \([-1,-1,-1,-1,-1]\) 也可以。这组样例提醒你,\(m\) 可以等于 \(0\),以及原序列可以含有负数或 \(0\)。

【数据范围】

设 \(\sum n\) 表示单个测试点中 \(n\) 的和。

对于所有测试数据,\(1 \le T\le 4\times10^4\),\(5\le n\le2\times 10^5\),\(\sum n\le 2\times10^5\),\(0\le m\le n\),\(1\le p_i\le n\),\(-10^{9} \le x_i \le 10^{9}\)。保证在同一组数据内 \(p_i\) 两两不同。

本题采用捆绑测试。

  • Subtask 1(20 points):\(n\le2000\) 且 \(m=n\)。
  • Subtask 2(30 points):\(n\leq 6\),\(|x|\le7\)。
  • Subtask 3(20 points):\(m=2\)。
  • Subtask 4(30 points):无特殊限制。

可恶的MX居然不开题解,真的是醉了TNT。

正片开始

首先将等式化为\(x_{1}-x_{2}=x_{3}-x_{4}\)和\(a_{x_{1}}-a_{x_{2}}=a_{x_{3}}-a_{x_{4}}\),可以发现这个序列必须是等差序列。

此时,我们只需要考虑任意两点的值差除以两点的坐标差是否为定值。细节处理见代码。

code:

int f=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
    cin>>a[i].x>>a[i].y;
for(int i=1;i<m;i++)
{
    if((a[i+1].y-a[i].y)%(a[i+1].x-a[i].x)==0)//整除的向下取整可能会寄
    {
        sum[i]=(a[i+1].y-a[i].y)/(a[i+1].x-a[i].x);//统计两点值差除两点坐标差的值
    }
    else{f=1;break;}
}
for(int i=1;i<m-1;i++){if(sum[i]!=sum[i+1]){f=1;break;}}   
if(f==1)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
for(int i=1;i<=m;i++){ a[i].x=0;a[i].y=0;sum[i]=0;}

不得不说图片挺好看的,果断保存


完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
ll t,n,m,sum[N];
struct node
{
    ll x,y;//编号,数值
}a[N];
int main()
{
    cin>>t;
    while(t--)
    {
        int f=0;
        cin>>n>>m;
        for(int i=1;i<=m;i++)
            cin>>a[i].x>>a[i].y;
        for(int i=1;i<m;i++)
        {
            if((a[i+1].y-a[i].y)%(a[i+1].x-a[i].x)==0)
            {
                sum[i]=(a[i+1].y-a[i].y)/(a[i+1].x-a[i].x);
            }
            else{f=1;break;}
        }
        for(int i=1;i<m-1;i++){if(sum[i]!=sum[i+1]){f=1;break;}}   
        if(f==1)cout<<"NO"<<endl;
        else cout<<"YES"<<endl;
        for(int i=1;i<=m;i++){ a[i].x=0;a[i].y=0;sum[i]=0;}
    }
    return 0;
}

完结收工!!!!!

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

标签:le,洛谷,题解,样例,测试数据,Downarrow,序列,Yes,Awaken
From: https://www.cnblogs.com/qc0817/p/18352640

相关文章

  • 洛谷 CF896C Willem, Chtholly and Seniorious之珂朵莉树板子
    洛谷CF896C题解传送锚点摸鱼环节Willem,ChthollyandSeniorious题面翻译【题面】请你写一种奇怪的数据结构,支持:\(1\)\(l\)\(r\)\(x\):将\([l,r]\)区间所有数加上\(x\)\(2\)\(l\)\(r\)\(x\):将\([l,r]\)区间所有数改成\(x\)\(3\)\(l\)\(r\)\(x\):输出将\(......
  • P4933 大师 题解
    题目传送门思路动态规划看到题目就想到了最长上升子序列。类比最长上升子序列,发现多了一个要求,可以多开一维。设\(f_{i,j}\)表示以\(i\)为结尾,\(j\)为公差的序列的长度(点的个数$-1$),那么答案就为\[\sum_{i=1}^{n}\sum_{j=-\max(v)}^{\max(v)}f_{i,j}\]看上去......
  • ABC201E Xor Distances 题解
    ABC201EXorDistances题解题目大意给定一个带权树,求树上每两点的简单路径上的边权的异或和的和。形式化的,定义\(dis(i,j)\)为\(i\)到\(j\)的简单路径上的边权的异或和,求\(\large\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n\text{dis}(i,j)\)。Solve令\(\largef(u)=......
  • 洛谷 P1127 词链——题解
    洛谷P1127题解传送锚点摸鱼环节词链题目描述如果单词\(X\)的末字母与单词\(Y\)的首字母相同,则\(X\)与\(Y\)可以相连成\(X.Y\)。(注意:\(X\)、\(Y\)之间是英文的句号.)。例如,单词dog与单词gopher,则dog与gopher可以相连成dog.gopher。另外还有一些例子:dog......
  • CF1155C 题解
    题目传送门题目大意:给定一个长度为\(n\)的单增序列\(a\)和一个长度为\(m\)的序列\(b\),询问是否存在一个正整数\(y\)使得\(a_1\equiva_2\equiv\cdots\equiva_n\equivy\space(\bmod\spacep)\),且\(p\)在序列\(b\)中出现过。思路:将条件转化一下,得:是否存在一个......
  • 08-08 题解
    08-08题解地址A-CF1420Eluogu翻译更正ifhegivesnomorethatkorders对于至多k次操作,题面没有翻译出来思路怎么算贡献?贡献(被保护)出现在「处在任意两个不同的0的连续段的守卫」之间,而处于同一连续段的守卫之间没有贡献设一共\(cnt\)个\(0\),每个连续......
  • 提高组:玩具谜题 题解
    题目描述小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:这时singer告诉小南一个谜题:“眼镜藏在我左数第 33 个玩具小人的右数第 11 个玩具小人的左数第......
  • 08-09 题解
    08-09题解A小水题思路假设我们选定了当前子序列的绝对众数\(x\),那么该序列里最多再放\(num_x-1\)个其他数字为了分出最少的子序列,肯定要让每个子序列在拥有绝对众数的同时能消化尽量多的其他数字由此,可以得到一个贪心策略:每次取出出现次数最多的一个数字,消掉出现......
  • P1725 琪露诺 题解
    思路动态规划,单调队列动态规划观察题目,发现下标为\(i\)的点只能对\([i+l,i+r]\)区间的点产生贡献。设\(f_i\)为到达点\(i\)时的最大冻结指数。易得状态转移方程式:\(f_k\leftarrow\max(f_k,f_i+a_k),(k\in[i+l,i+r])\)。若直接对该方程进行转移,时间复......
  • 洛谷 P2731 骑马修栅栏 Riding the Fences之欧拉路径板子
    洛谷P2731题解传送锚点摸鱼环节[USACO3.3]骑马修栅栏RidingtheFences题目背景FarmerJohn每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。题目描述John是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个栅栏。John的农场上......