比赛地址:https://ac.nowcoder.com/acm/contest/11038#question
A:
用结构体存储每个点的xy坐标
因为所有点的xy坐标小于等于200,且答案坐标为整数,所以直接枚举答案的xy坐标,
利用两点间距离公式:
即可
时间复杂度:O(40000n)
#include<bits/stdc++.h> using namespace std; struct abc { int x,y; }; int main() { int n; cin>>n; abc a[n+1]; for(int i=1;i<=n;i++) { cin>>a[i].x>>a[i].y; } for(int x=1;x<=200;x++) { for(int y=1;y<=200;y++) { int p=(x-a[1].x)*(x-a[1].x)+(y-a[1].y)*(y-a[1].y); int f=0; for(int i=2;i<=n;i++) { if(p!=(x-a[i].x)*(x-a[i].x)+(y-a[i].y)*(y-a[i].y)) { f=1; break; } } if(f==0) { cout<<x<<" "<<y<<" "<<endl; return 0; } } } cout<<"War is cruel."<<endl; return 0; }
B:
这道题的意思,相当与把每个国家的战力排序,如果下一个国家的编号小于当前国家编号,那么必须传多一轮,才能到达下一个国家,按照这样的思路,我们用一个结构体存储每个国家的编号和战力,利用STL中的sort进行排序,直接从前往后枚举即可。
时间复杂度:O(n log n)
#include<bits/stdc++.h> using namespace std; struct abc { int x,id; }; bool cmp(abc f1,abc f2) { return f1.x>f2.x; } int main() { int n; cin>>n; abc a[n+1]; for(int i=1;i<=n;i++) { cin>>a[i].x; a[i].id=i; } sort(a+1,a+1+n,cmp); int ans=1; for(int i=2;i<=n;i++) { if(a[i].id<a[i-1].id) { ans++; } } cout<<ans<<endl; return 0; }