Antinomy与水晶都

题目描述 

沉迷《原初幻想41》的冒险者Antinomy穿越到了第一世界,这是暗之战士一切开始的地方——水晶都/クリスタリウム/The Crystarium

见完水晶公后,Antinomy逛了逛,发现水晶都的防护罩由好几个魔法装置维持着,这些点由一条路通向水晶都的二层,在地图上看非常规整,于是他突发奇想:

假设在地图上有nn个装置,第ii个(从11开始)装置的坐标是(i,y_i)(i,yi),是否可以找出两条平行的直线,让这nn个装置中的每一个都恰好在两条直线的其中一条上?要求每条直线至少经过一个装置。每个装置可看做一个点。

找出这两条这样的直线的话就可以修路,使得在食罪灵来袭时以最快的速度支援。你能计算出来吗?

输入描述:

第一行为一个数字nn表示装置个数

第二行为 nn个空格分隔的整数表示y_1,y_2,y_3,…,y_ny1,y2,y3,,yn
 
3 \leq n \leq 10^33n103
-10^9 \leq y_i \leq 10^9109yi109

输出描述:

如果能够找到那么输出QWQ,否则输出QAQ
示例1

输入

复制
5
10000000 0 0 0 0

输出

复制
QWQ
示例2

输入

复制
5
5 4 3 2 1

输出

复制
QAQ

备注:

两条直线不可重合
题解:
要看清题目中明确说明存在两条平行线,所以我们可以画图依次连接相邻的两点,可以发现,
如果这两条线平行,可以有两个或者三个不同的斜率,于是用set容器统计一下不同斜率的个数就好了。
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <string>
 5 #include <cstring>
 6 #include <cstdlib>
 7 #include <cmath>
 8 #include <stack>
 9 #include <queue>
10 #include <set>
11 #include <map>
12 #include <vector>
13 #include <ctime>
14 #include <cctype>
15 #include <bitset>
16 #include <utility>
17 #include <sstream>
18 #include <complex>
19 #include <iomanip>
20 #define inf 1000000007
21 typedef long long ll;
22 using namespace std;
23 int n;
24 ll y[1010];
25 set<ll>se;
26 int main()
27 {
28     cin>>n;
29     cin>>y[1];
30     for(int i=2;i<=n;i++){
31         cin>>y[i];
32         se.insert((y[i]-y[i-1])*1.0);
33     }
34     if(se.size()==3||se.size()==2)
35         cout<<"QWQ"<<endl;
36     else
37         cout<<"QAQ"<<endl;
38     return 0;
39 }
 
  
 


猜你喜欢

转载自www.cnblogs.com/mxnzqh/p/12006835.html