NC208010. 杰尼杰尼
描述
输入描述
第一行输入一个整数,表示杰尼龟兄弟的数量
下面n行每行包括两个整数,和,其含义和直线方程相同
对所有的和在64位整形的范围内
输出描述
如果不存在交点输出"No Fire Point." (不包括引号)
否则输出一个整数表示不同交点的个数。
示例1
输入:
2 1 0 -1 2
输出:
1
C++(g++ 7.5.0) 解法, 执行用时: 5ms, 内存消耗: 768K, 提交时间: 2023-05-15 17:12:01
#include<iostream> #include<set> using namespace std; #define N 110 typedef pair <double,double> pdd; set<pdd> se; long long n,k[N],b[N]; double x,y; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>k[i]>>b[i]; } for(int i=1;i<=n-1;i++){ for(int j=i+1;j<=n;j++){ if(k[i]==k[j]){ continue; }else{ x=1.0*(b[j]-b[i])/(k[i]-k[j]); y=k[i]*x+b[i]; pdd t; t.first =x; t.second =y; se.insert(t); } } } if(!se.size() ){ cout<<"No Fire Point."<<endl; }else{ cout<<se.size() <<endl; } return 0; }
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 632K, 提交时间: 2020-08-04 19:22:01
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<double,double>pdd; main(){ int n; cin>>n; double k[120]={0},b[120]={0}; set<pdd>s; for(int i=1;i<=n;i++){ cin>>k[i]>>b[i]; } for(int i=1;i<n;i++){ for(int j=i+1;j<=n;j++){ if(k[j]==k[i])continue; else{ pdd t; t.first = (b[j]-b[i])/(k[i]-k[j]); t.second =k[j]*t.first +b[j]; s.insert(t); } } } if(s.size()==0)cout<<"No Fire Point."<<endl; else cout<<s.size()<<endl; }
C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 660K, 提交时间: 2020-07-09 15:23:47
#include <bits/stdc++.h> using namespace std; int main() { int n,k[101],b[101],ans=0; set<pair<double,double>> v; cin>>n; for(int i=1;i<=n;i++) cin>>k[i]>>b[i]; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { if(k[j]!=k[i]) { double x=(b[j]-b[i])*1.0/(k[i]-k[j]); double y=x*k[j]+b[j]; v.insert(make_pair(x,y)); } } if(v.size()==0) cout<<"No Fire Point."<<endl; else cout<<v.size()<<endl; return 0; }