E. Sending a Sequence Over the Network(DP)
创始人
2024-02-09 09:11:56
0

Problem - 1741E - Codeforces

 

序列a在网络上的发送情况如下。

序列a被分割成若干段(序列的每个元素正好属于一个段,每个段是序列的一组连续元素)。
对于每个段,它的长度被写在它的旁边,要么在它的左边,要么在它的右边。
得到的序列b被发送到网络上。
例如,我们需要发送序列a=[1,2,3,1,2,3]。假设它被分割成如下的片段。[1]+[2,3,1]+[2,3]. 那么我们可以有以下的序列。

b=[1,1,3,2,3,1,2,3,2],
b=[1,1,3,2,3,1,2,2,3],
b=[1,1,2,3,1,3,2,2,3],
b=[1,1,2,3,1,3,2,3,2].
如果使用了不同的分割,发送的序列可能会有所不同。

序列b是给定的。序列b可以通过网络发送吗?换句话说,是否有这样一个序列a,将a转换为网络上的发送序列b?

输入
输入数据的第一行包含一个整数t(1≤t≤104)--测试案例的数量。

每个测试用例由两行组成。

测试用例的第一行包含一个整数n(1≤n≤2⋅105)--序列b的大小。

测试用例的第二行包含n个整数b1,b2,...,bn(1≤bi≤109)--序列b本身。

可以保证所有测试用例的n之和不超过2⋅105。

输出
对于每个测试用例,在单独一行中打印。

如果序列b可以通过网络发送,也就是说,如果序列b可以从某个序列a中得到,以便通过网络发送a,则为YES。
否则为NO。
你可以在任何情况下输出YES和NO(例如,字符串yEs、yes、Yes和YES将被识别为积极响应)。


inputCopy
7
9
1 1 2 3 1 3 2 2 3
5
12 1 2 7 5
6
5 7 8 9 10 3
4
4 8 6 2
2
3 1
10
4 6 2 1 9 4 9 3 4 2
1
1
outputCopy

是的

没有



备注
在第一种情况下,序列b可以从序列a=[1,2,3,1,2,3]中得到,分区如下。[1]+[2,3,1]+[2,3]. 序列b:[1,1,2,3,1,3,2,2,3]。

在第二种情况下,序列b可以从序列a=[12,7,5]中得到,其分割方式如下。[12]+[7,5]. 序列b:[12,1,2,7,5]。

在第三种情况下,序列b可以从序列a=[7,8,9,10,3]中得到,分区如下。[7,8,9,10,3]. 序列b:[5,7,8,9,10,3]。

在第四种情况下,不存在序列a,以至于改变a在网络上的传输可以产生序列b。

题解:
每一次判断当前位置是否合法,都要从前面转移过来

假如说,当前位置为i,

i-a[i]-1 >= 0边界限制

f[i-a[i]-1]如果合法

根据题意,那么i-a[i] ~ i一定是合法的,

否则既然前面都已经不合法了,后面就一定不合法

对后面元素也要判断,

还是先判断边界

i + a[i+1]+1<=n

f[i]也应是合法的情况下才能进行下面的

f[i+a[i+1]+1] = 1也一定合法

#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define int long long
//1 1 3 3 3
int a[300050];
int f[300050];
void solve()
{int n;cin >> n;for(int i =  1;i <= n;i++)cin >> a[i],f[i] = 0;f[0] = 1;for(int i = 0;i <= n;i++){if(i-a[i] -1>=0&&f[i - a[i]-1])f[i] = 1;if(f[i]&&i+a[i+1]+1<=n)f[i+a[i+1]+1] = 1; }if(f[n])cout<<"YES\n";elsecout<<"NO\n";}
signed main()
{int t = 1;cin >> t;while(t--){solve();}
}
//2 5
//3
//9 7 //2  3 4 3

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...