nyoj109 数列转换
来源:互联网 发布:软件管理器官方下载 编辑:程序博客网 时间:2024/05/18 04:08
题目:点击打开链接
理解:有的题目,一看就应该是模拟,而有的题目规律性很强,我们看这道题是从(an-1,an,an+1)转化到(an-1+an,-an,an-1+an),三个数的和是不变的。
那我们就想到是否数列额总和一样,两个数列就可以互达呢?
在我们下结论之前肯定要举几个例子,验证一下。
好现在考虑(1 2 3)(1 3 2)
(1 2 3)→(3,-2,5)→(1 2 3)所以这个想法是不行的
总和虽然不行,我们可以试着考察局部和(即前n项和)
(an-1,an,an+1) (an-1+an,-an,an-1+an)
Sn-1=an-1 S’n-1=an-1+an
Sn=an-1+an S’n=an-1
Sn=an-1+an+an+1 S’n+1=an-1+an+an+1
可以看到前后两个数列的前两项是位置是相反的,最后一个位置是不变的。
很容易的,我们推广一下:Sn=a1+a2+a3+...+an-1+an,那么题述规则就是相当于交换Sn-1.Sn,也就是说,两个数列,分别求前n项和,排序后,看是否对应相等。
总结:这就是对题目理解的熟练度,做的多了,自然会想到求和,综合不行,就考虑部分和,这里也体现了守恒的思想。对于数列判等的,系统提供了一个equal函数。
上码:
#include<iostream>#include<algorithm> using namespace std; int S[1002], E[1002]; int main() {int nCase, n;cin >> nCase; while (nCase--) {cin >> n; for (int i = 1; i <= n; i++) {cin >> S[i];S[i] += S[i - 1];} for (int i = 1; i <= n; i++) {cin >> E[i];E[i] += E[i - 1];} sort(S + 1, S + n + 1);sort(E + 1, E + n + 1);equal(E + 1, E + n + 1, S + 1) ? cout << "Yes" << endl : cout << "No" << endl; } return 0;}
0 0
- nyoj109 数列转换
- NYOJ109 数列转换 【守恒法】
- NYOJ109 数列转换(守恒技巧+数学)
- 数列转换
- 数列转换
- 数列转换
- 数列转换(nyoj 109)
- nyoj 109 数列转换
- nyoj 109 数列转换
- NY109 数列转换
- NYOJ 109数列转换
- NYOJ 109. 数列转换
- 数列转换(守恒思想)
- nyoj-109 数列转换 (守恒定律)
- NYOJ-109 数列转换 AC
- Fibonacci数列的计算和转换
- Fibonacci数列的计算和转换
- Fibonacci数列的计算和转换
- soa个人理解
- PM2 介绍
- crontab里脚本无法执行解决办法
- Mac os Python 安装 chardet模块
- 安装libsvm遇到的问题
- nyoj109 数列转换
- 【C语言】2/1+3/2+5/3+8/5+13/8+...分数数列前20项和
- C 反转字符串中的单词 "student a am i " --> "i am a student "
- 4*4魔方程序
- poj 2155 二维树状数组/区间更新单点查询
- Nginx+htpasswd+PHPpgadmin
- Failed to execute goal on project mycollab-config: Could not resolve dependencies for project com.es
- vim操作转载
- 3.22