题目描述
沉迷《原初幻想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^33≤n≤103
-10^9 \leq y_i \leq 10^9−109≤yi≤109
输出描述:
如果能够找到那么输出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 }