1128. N Queens Puzzle (20)[数学逻辑题]
来源:互联网 发布:虚拟化软件 比较 编辑:程序博客网 时间:2024/05/01 21:33
1. 原题:https://www.patest.cn/contests/pat-a-practise/1128
2. 思路:
题意:数学逻辑题。
给出一个序列,判断是否是国际象棋的一局。
即:任意两个棋子都不在一行、一列及斜对角线(45度)。
思路:
题目已经保证不在一列了。
接下来要判断行和对角线的情况。
行的情况,给出的序列不存在相同的,则满足。
反映在算法上,这里利用了set的性质-不存在重复的元素。
把每一个插入set里,判断set的大小即可。
对角线的情况。
这里有点小技巧,转换到直线上就简单了。
每一个棋子的位置,我们可以得出它所在的两条直线方程。
即斜率分别为1和-1的两条直线。形如y=x + a 和 x + y = b。
于是同样使用两个set,先判断set里是否有a和b,没有插入set里。
有的话,则说明不满足对角线的情况。
已AC。
给出一个序列,判断是否是国际象棋的一局。
即:任意两个棋子都不在一行、一列及斜对角线(45度)。
思路:
题目已经保证不在一列了。
接下来要判断行和对角线的情况。
行的情况,给出的序列不存在相同的,则满足。
反映在算法上,这里利用了set的性质-不存在重复的元素。
把每一个插入set里,判断set的大小即可。
对角线的情况。
这里有点小技巧,转换到直线上就简单了。
每一个棋子的位置,我们可以得出它所在的两条直线方程。
即斜率分别为1和-1的两条直线。形如y=x + a 和 x + y = b。
于是同样使用两个set,先判断set里是否有a和b,没有插入set里。
有的话,则说明不满足对角线的情况。
已AC。
3. 源码
#include <iostream>#include <set>using namespace std;int main(){//freopen("in.txt", "r", stdin);int N;cin >> N;for (int i = 0; i < N; i++){int M;bool valid = true;//判断对角线的情况是否满足cin >> M;set<int> row, positive, negative;//分别为行、正斜率和负斜率的setfor (int j = 1; j <= M; j++){int t;cin >> t;row.insert(t);int pe = t - j;int ne = t + j;if (positive.count(pe) == 0)positive.insert(pe);elsevalid = false;if (negative.count(ne) == 0)negative.insert(ne);elsevalid = false;}if (row.size() == M && valid)//都满足,成立cout << "YES" << endl;elsecout << "NO" << endl;}return 0;}
阅读全文
0 0
- 1128. N Queens Puzzle (20)[数学逻辑题]
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle (20)
- PAT 1128. N Queens Puzzle (20)
- PAT 1128. N Queens Puzzle (20)-甲级
- PAT 1128. N Queens Puzzle (20)
- PAT甲级 1128. N Queens Puzzle (20)
- PAT 1128. N Queens Puzzle (20)
- PAT 甲级 1128. N Queens Puzzle (20)
- 1128. N Queens Puzzle 解析
- PAT--1128. N Queens Puzzle
- 1840: 挂盐水
- javase练习(排序,IO流,机试,综合)
- c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
- hashcode小结
- 机器学习如何解决问题
- 1128. N Queens Puzzle (20)[数学逻辑题]
- LeetCode-264. Ugly Number II
- C++面向对象设计
- AndroidStudio非法字符: '\ufeff'解决
- 3_android开发和java开发的一些概念理解
- 寄存器
- CSS-关键帧动画
- 【TX1学习与开发系列】Kintinuous移植到TX1的一些问题总结(三)
- Kotlin 从学习到 Android 第四章 控制流