洛谷 P1142 轰炸
生活随笔
收集整理的這篇文章主要介紹了
洛谷 P1142 轰炸
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
洛谷 P1142 轟炸
題目描述
“我該怎么辦?”飛行員klux向你求助。
事實上,klux面對的是一個很簡單的問題,但是他實在太菜了。
klux要想轟炸某個區域內的一些地方,它們是位于平面上的一些點,但是(顯然地)klux遇到了抵抗,所以klux只能飛一次,而且由于飛機比較破,一點起飛就只能沿直線飛行,無法轉彎。現在他想一次轟炸最多的地方。
輸入輸出格式
輸入格式:
第一行為n
輸入數據由n對整數組成(1<=n<=700),每對整數表示一個點的坐標。沒有一個點會出現兩次。
輸出格式:
一個整數,表示一條直線能覆蓋的最多的點數。
輸入輸出樣例
輸入樣例#1:?5 1 1 2 2 3 3 9 10 10 11輸出樣例#1:?
3
說明
本題翻譯并改編自uva270,數據及解答由uva提供。
題解:
主要就是暴力枚舉和判斷兩點是否在同一條直線上啊;
找到公式就好了。
(x[zzz]-x[z])*(y[zzz]-y[zz])==(y[zzz]-y[z])*(x[zzz]-x[zz])
90分,TLE了一個點。
1 #include<cstdio> 2 int max(int x,int y) 3 { 4 return x>y?x:y; 5 } 6 int x[1007],y[1007]; 7 bool check(int z,int zz,int zzz) 8 { 9 return (x[zzz]-x[z])*(y[zzz]-y[zz])==(y[zzz]-y[z])*(x[zzz]-x[zz])?true:false; 10 } 11 int n,ans,answer=0; 12 int main() 13 { 14 scanf("%d",&n); 15 for(int i=1; i<=n; i++) 16 scanf("%d%d",&x[i],&y[i]); 17 for(int i=1; i<n; i++) 18 { 19 for(int j=i+1; j<=n; j++) 20 { 21 ans=2; 22 for(int k=1; k<=n; k++) 23 { 24 if(k==i||k==j) continue; 25 if(check(i,j,k)) ans++; 26 } 27 answer=max(answer,ans); 28 } 29 } 30 printf("%d",answer); 31 return 0; 32 } 33 /* 34 5 35 1 1 36 2 2 37 3 3 38 9 10 39 10 11 40 41 3 42 */過去的代碼風格
1 #include<cstdio> 2 int max(int x,int y) { 3 return x>y?x:y; 4 } 5 int x[1007],y[1007]; 6 bool check(int z,int zz,int zzz) { 7 return (x[zzz]-x[z])*(y[zzz]-y[zz])==(y[zzz]-y[z])*(x[zzz]-x[zz])?true:false; 8 } 9 int n,ans,answer=0; 10 int main() { 11 scanf("%d",&n); 12 for(int i=1; i<=n; i++) 13 scanf("%d%d",&x[i],&y[i]); 14 for(int i=1; i<n; i++) { 15 for(int j=i+1; j<=n; j++) { 16 ans=2; 17 for(int k=1; k<=n; k++) { 18 if(k==i||k==j) continue; 19 if(check(i,j,k)) ans++; 20 } 21 answer=max(answer,ans); 22 } 23 } 24 printf("%d",answer); 25 return 0; 26 } 27 /* 28 5 29 1 1 30 2 2 31 3 3 32 9 10 33 10 11 34 35 3 36 */現在的代碼風格
然后,不用函數,并且輸出改成cout,就A了,,,
學長好像講過,cout輸出數字比printf快
#include<cstdio> #include<iostream> int max(int x,int y) {return x>y?x:y; } int x[707],y[707]; int n,ans,answer=0; int main() {scanf("%d",&n);for(int i=1; i<=n; i++)scanf("%d%d",&x[i],&y[i]);for(int i=1; i<n; i++) {for(int j=i+1; j<=n; j++) {ans=2;for(int k=1; k<=n; k++) {if(k==i||k==j) continue;if((x[k]-x[i])*(y[k]-y[j])==(y[k]-y[i])*(x[k]-x[j])) ans++;}answer=max(answer,ans);}}std::cout<<answer;return 0; }依舊是現在的代碼風格
?
一世安寧
轉載于:https://www.cnblogs.com/GTBA/p/9083314.html
總結
以上是生活随笔為你收集整理的洛谷 P1142 轰炸的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s系列----一个简单的例子
- 下一篇: 减肥个性签名2015最新版