新年糖果的题解

目录

原题描述: 

题目描述

输入格式

输出格式

样例

Input 1

Output 1

Input 2

Output 2

数据范围

主要思路:

小细节:

代码code:


原题描述: 

时间限制: 1000ms

空间限制: 262144kb

题目描述

新年到了,小乌和小漆每人都从妈妈那里获得了n种糖果(序号为1到n),小乌和小漆获得的每种糖果数量不完全相同。他们可以知道自己和对方获得的每种糖果数量。小漆想得到和小乌完全一样的糖果数量(即两人每种糖果数量完全一致),他可以通过以下操作向妈妈交易糖果:对于第i种糖果( 2 \le i \le n-1 ),可以通过交换,使得第i种糖果的数量为第i+1种糖果数量与第i-1种糖果数量的和减去第i种糖果数量。例:小漆获得的糖果数量分别为1,2,3,那么他可以将第22种糖果数量变为2(1+3-2) = 2
​小漆可以和妈妈交易无数次,但是他不知道能不能得到和小乌一样的糖果。如果他通过无数次操作,拥有的每种糖果数量都跟小乌一样,那么可以小漆会很开心,发出happy的声音;如果不可以,小漆会很难过发出wuwu的声音。你能知道小漆会发出什么声音吗?

输入格式

第一行输入一个整数T ,表示测试数据组数。
​每组测试数据第一行包含一个整数n,表示n 种糖果。
​每组测试数据第二行包含n个整数a_1,a_2,...,a_n​ 表示小漆获得的每种糖果的数量。
​每组测试数据第三行包含n个整数 b_1,b_2,...,b_n 表示小乌获得的每种糖果的数量。
注:本题输入数据较多,建议优化输入。

输出格式

对于每组数据,一行一个答案(happy or ����wuwu )。
​如果小漆可以通过无数次交易,拥有的每种糖果数量都和小乌一样,输出happy;如果不可以,输出wuwu

样例

Input 1
2
7
1 5 3 7 8 6 2
1 -1 3 4 2 6 2
6
-7 4 13 11 42 8
-7 -9 2 10 -23 8
Output 1
happy
wuwu
Input 2
3
7
6 8 7 3 2 6 11
6 2 4 3 7 10 11
10
5 4 8 6 9 4 3 6 8 10
5 4 2 5 0 4 3 5 7 10
4
1 4 3 5
1 3 6 5
Output 2
wuwu
happy
happy

数据范围

对于所有测试数据有:1 \le T \le 10^3,1 \le n \le 10^5, -10^9\le a_i,b_i \le 10^9

主要思路:

看看这道题,你也许会想:这咋做啊???

接着,看看数据范围,你考虑暴力。

但是,问题来了,怎么暴力???

dfs?,for循环??好像暴力也不可行(如果谁想到暴力写法,再评论区留言)

所以,你放弃了这一题。

好好好,不说偏了,来看看具体怎么做。

仔细的读者会看看文章标签:交换差分。

没错,就是这样。

我们来举个粒子。

假设小漆的糖果数量如下:

1,5,3,7,8,6,2。

我们求出差分数组(chafen[i] = a[i]-a[i-1] 2<=i<=n)

差分数组:4,-2,4,1,-2,-4。

假设我们交易第二种类糖果。

交易后:

1,(1+3)-5=-1,3,7,8,6,2。

我们再求一遍差分数组。

-2,4,4,1,-2,-4

发现了啥???

对于任意的交易,差分数组只是交换了一下,具体值没有改变。

所以你只需要求出a,b两个数组,判断里面的元素是否相同。

小细节:

1:数据大,用cin会超时,要:ios::sync_with_stdio(0);cin.tie(0);

2:题目中说了,头尾不能交易,所以如果头尾不同,就不可以。

代码code:

#include<bits/stdc++.h>
using namespace std;
int t;
int n;
int a[100010];
int b[100010];
int cha[100010],cha1[100010];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		for(int i=1;i<=n;i++)
		{
			cin>>b[i];
		}
		if(a[1]!=b[1]||a[n]!=b[n])
		{
			cout<<"wuwu\n";
			continue;
		}
		for(int i=2;i<=n;i++)
		{
			cha[i] = a[i]-a[i-1];
		}
		for(int i=2;i<=n;i++)
		{
			cha1[i] = b[i]-b[i-1];
		}
		sort(cha+2,cha+n+1);
		sort(cha1+2,cha1+n+1);
		int flag=0;
		for(int i=2;i<=n;i++)
		{
			if(cha[i]!=cha1[i])
			{
				flag = 1;
				cout<<"wuwu\n";
				break;
			}
		}
		if(!flag)
		{
			cout<<"happy\n";
		}
	}
	return 0;
}

相关推荐

  1. [力扣题解]135. 分发糖果

    2024-02-19 20:48:01       28 阅读
  2. Leetcode【拥有最多糖果孩子】

    2024-02-19 20:48:01       25 阅读
  3. 题目 2016: 新生入队仪式

    2024-02-19 20:48:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 20:48:01       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 20:48:01       97 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 20:48:01       78 阅读
  4. Python语言-面向对象

    2024-02-19 20:48:01       88 阅读

热门阅读

  1. rust的哈希表

    2024-02-19 20:48:01       48 阅读
  2. CSS background-size

    2024-02-19 20:48:01       55 阅读
  3. 甲辰年正月初五迎财神

    2024-02-19 20:48:01       50 阅读
  4. 普中51单片机学习(七)

    2024-02-19 20:48:01       50 阅读
  5. 扫地机器人与项目管理

    2024-02-19 20:48:01       48 阅读
  6. 用结构体数组,完成宠物信息登记管理。

    2024-02-19 20:48:01       44 阅读
  7. 深度强化学习(DRL)算法 2 —— PPO 之 GAE 篇

    2024-02-19 20:48:01       50 阅读
  8. 文件的版本管理

    2024-02-19 20:48:01       57 阅读
  9. H3C- VRF/VPN-instance概念

    2024-02-19 20:48:01       43 阅读
  10. 洛谷P1019:[NOIP2000 提高组] 单词接龙

    2024-02-19 20:48:01       56 阅读