日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

洛谷 P1142 轰炸

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 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 轰炸的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。