您的位置:首页 > 大数据 > 人工智能

HDU 6048 - Puzzle | 2017 Multi-University Training Contest 2

2017-07-31 13:07 417 查看
/*
HDU 6048 - Puzzle [ 思维,结论 ]  |  2017 Multi-University Training Contest 2
题意:
类似华容道的问题, N*M 的矩阵中N*M-1个元素按一定要求打乱,每次可以把一个和空格有公共边的块和空格交换
问能否还原局面:从上到下从左到右,依次填 1,2,3,… 右下角为空。
分析:
结论1:将原矩阵看作从左到右从上到下的数列,任意操作不改变 逆序对数量的奇偶性
结论2:任意局面一定能还原到 除了最右下角2*2方格中的3个数字,剩下的数字全都移到要求位置
结论3:最右下角2*2方格的局面中只有序对数量的奇偶性相同的可互达
最终结论:数列逆序对为偶数则YES,反之为NO

由于每次隔P个拿,故当某轮桌上只有num个数字时,第x+1次取第 xp+1 个,它前面有xp个数字,被拿掉了x个
故对于这一轮的第x+1个数字对逆序对的贡献为 x*(p-1),可以看出是等差数列
*/
#include <bits/stdc++.h>
using namespace std;
int t, n, m, p;
int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d%d%d", &n, &m, &p);
int ans = 0, num = n*m-1;
while (num > p)
{
int x = (num-1)/p;
ans += x*(p-1) * (x+1) / 2;
num -= x+1;
}
if (ans&1) puts("NO");
else puts("YES");
}
}


  

题解证明很详细



*更新了代码,原代码TLE- -,num <= p 的时候就要退出。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐