N对数的排列问题

HDU - 2554

有N对双胞胎,他们的年龄分别是1,2,3,……,N岁,他们手拉手排成一队到野外去玩,要经过一根独木桥,为了安全起见,要求年龄大的和年龄小的排在一起,好让年龄大的保护年龄小的,然后从头到尾,每个人报告自己的年龄,就得到了一个年龄的序列。比如有4对双胞胎,他们报出来的年龄序列是:41312432。突然,他们中间最聪明的小明发现了一个有趣的现象,原来,这个年龄序列有一个规律,两个1中间有1个数,两个2中间有2个数,两个3中间有3个数,两个4中间有4个数。但是,如果是2对双胞胎,那么无论他们怎么排年龄序列,都不能满足这个规律。 
你的任务是,对于给定的N对双胞胎,是否有一个年龄序列,满足这一规律,如果是,就输出Y,如果没有,输出N。

Input共有若干行,每行一个正整数N<100000,表示双胞胎的数量;如果N=0,表示结束。Output共有若干行,每行一个正整数,表示对应输入行是否有一个年龄序列,满足这一规律,如果是,就输出Y,如果没有,输出NSample Input

4
2
1309
0

Sample Output

Y
N
N
这个题实际上是一个数学问题,参照网上数学大佬给出的数学算法。我编程的时候使用的是c语言。
1.首先我们将第一个出现的定为ak(k=1,2,3……),第二个定义为bk(k=1,2,3……),要满足题目中所给出的条件,则必须满足bk-ak=k+1。
2.其次我们最终要寻找单独的ak或者bk的表达式,所以我们对bk-ak和bk+ak进行运算,我们首先对bk-ak进行求和sum(bk-ak)=2+3+4+…+(n+1)=n*(n+3)/2。
3.然后我们对bk+ak进行求和,每个数占一个位置从1开始到2n为止,所以sum(bk+ak)=sum(ak+bk)=1+2+3+...+2*n=(1+2*n)*(2*n)/2=(1+2*n)*n。
4.sum(ak+bk)=sum(ak+ak+k+1)=sum(2*ak+bk-ak)=2*sum(ak)+sum(bk-ak)=2*sum(ak)+n*(n+1)/2+n。
5.通过2与3可得n*(n+3)/2=2*sum(ak)+n*(n+1)/2+n,sum(ak)=n*(3*n-1)/4。
最后得到的结果中无法得到ak的直接表达式,但如果ak位整数,那么显然sum(ak)一定为整数,最后就可以得到只要n*(3*n-1)/4为整数,就是一定存在的。

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n,o,p;
while(scanf("%d",&n)!=EOF&&n!=0){
o=n*(3*n-1);
if(o%4==0){
printf("Y\n");
}
else
printf("N\n");
}
return 0;
}

N对数的排列问题 HDU - 2554的更多相关文章

  1. HDU 2554 N对数的排列问题

    LINK:HDU 2554 这是昨天晚上小练里面比较有趣的一道题~我在做的时候思路错了,以为数字的排列会有规律,结果后面发现就算有也很难找......╮(╯▽╰)╭ 看了网上的题解,有一种恍然大悟的感 ...

  2. 排列组合 HDU - 1521 -指数型母函数

    排列组合 HDU - 1521 一句话区分指数型母函数和母函数就是 母函数是组合数,指数型母函数是排列数 #include<bits/stdc++.h> using namespace s ...

  3. (step7.2.3)hdu 2554(N对数的排列问题——简单数论)

    题目大意:输入一个整数n,表示有n对整数.判断能否出现一种情况就是2个1之间有1个数,2个2之间有2个数..... 解题思路: 准备知识: ①n对数,共2*n个数.所以要有2*n个位置来放置这2*n个 ...

  4. HDU 2554 N对数的排列问题 ( 数学 )

    题目链接 Problem Description 有N对双胞胎,他们的年龄分别是1,2,3,--,N岁,他们手拉手排成一队到野外去玩,要经过一根独木桥,为了安全起见,要求年龄大的和年龄小的排在一起,好 ...

  5. hud 2554 N对数的排列问题 (规律)

    题目链接 Problem Description 有N对双胞胎,他们的年龄分别是1,2,3,--,N岁,他们手拉手排成一队到野外去玩,要经过一根独木桥,为了安全起见,要求年龄大的和年龄小的排在一起,好 ...

  6. hdu2554-N对数的排列问题

    http://acm.hdu.edu.cn/showproblem.php?pid=2554 假设所有的2n个数据的位置分别从1~2n标号. 现在假设其中第ai个数据(双胞胎),和bi.那么他们的位置 ...

  7. (next_permutation) 排列2 hdu 1716

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  8. hdu 2554 最短路 (dijkstra)

    最短路Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  9. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

随机推荐

  1. January 21 2017 Week 3 Saturday

    Courage is grace under pressure. 勇气就是压力下的优雅. In the face of stress, can you deal with your task smoo ...

  2. SchemaSpy

    SchemaSpy https://github.com/schemaspy/schemaspy/releases https://sourceforge.net/projects/schemaspy ...

  3. 关于notify() 和notifyAll() 一个需要注意的地方

    notify() 和 notifyAll()都是唤醒其他正在等待同一个对象锁的线程. 下面是我遇到的一个问题,记下来,免得忘了. 直接上代码,有错误的代码: 代码描述:有一个Caculate类,类中又 ...

  4. android之对于view的一点深入理解

    最近在写程序中,遇到了之前自己没遇到过的代码,一番理解后才知道原来是在动态设定xml布局中的属性.即利用LayoutParams可以动态的设定布局或者控件的宽和高,以及的它的左间距,右间距,内间距,和 ...

  5. 在.Net项目中使用Redis作为缓存服务

    转自:http://www.cnblogs.com/hohoa/p/5771255.html 最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写 ...

  6. 2018.12.31 Failed to load JavaHL Library.错误解决

    创建项目出现下面的错误 Failed to load JavaHL Library. These are the errors that were encountered: no libsvnjava ...

  7. LVS的DR模式负载均衡

    参考项目:http://www.cnblogs.com/along21/p/7833261.html#auto_id_3 LVS的DR模式实现负载均衡 1.环境 lvs-server :192.168 ...

  8. java使用Redis(六个类型)

    下载插件:https://mvnrepository.com/artifact/redis.clients/jedis/3.0.0 maven项目依赖: <dependency> < ...

  9. wshShell.SendKeys模拟键盘操作

    Dim wshShellSet wshShell = CreateObject("Wscript.Shell")wshShell.SendKeys "{ENTER}&qu ...

  10. 转-四种方案解决ScrollView嵌套ListView问题

    本人网上用的ID是泡面或安卓泡面,学习一年半之前开始从事Android应用开发,这是我写的第一篇Android技术文章,转载请注明出处和作者,有写的不好的地方还请帮忙指出,谢谢. 在工作中,曾多次碰到 ...