1. 程式人生 > >NOI題庫1814 惱人的青蛙

NOI題庫1814 惱人的青蛙

1814:惱人的青蛙

總時間限制:

2000ms

單個測試點時間限制:

500ms

記憶體限制:

65536kB

描述

在韓國,有一種小的青蛙。每到晚上,這種青蛙會跳越稻田,從而踩踏稻子。農民在早上看到被踩踏的稻子,希望找到造成最大損害的那隻青蛙經過的路徑。每隻青蛙總是沿著一條直線跳越稻田,而且每次跳躍的距離都相同。

如下圖所示,稻田裡的稻子組成一個柵格,每棵稻子位於一個格點上。而青蛙總是從稻田的一側跳進稻田,然後沿著某條直線穿越稻田,從另一側跳出去

如下圖所示,可能會有多隻青蛙從稻田穿越。青蛙的每一跳都恰好踩在一棵水稻上,將這棵水稻拍倒。有些水稻可能被多隻青蛙踩踏。當然,農民所見到的是圖4中的情形,並看不到圖3中的直線,也見不到別人家田裡被踩踏的水稻,。


根據圖4,農民能夠構造出青蛙穿越稻田時的行走路徑,並且只關心那些在穿越稻田時至少踩踏了3棵水稻的青蛙。因此,每條青蛙行走路徑上至少包括3棵被踩踏的水稻。而在一條青蛙行走路徑的直線上,也可能會有些被踩踏的水稻不屬於該行走路徑
①不是一條行走路徑:只有兩棵被踩踏的水稻;
②是一條行走路徑,但不包括(2,6)上的水道;
③不是一條行走路徑:雖然有3棵被踩踏的水稻,但這三棵水稻之間的距離間隔不相等。

請你寫一個程式,確定:在一條青蛙行走路徑中,最多有多少顆水稻被踩踏。例如,圖4的答案是7,因為第6行上全部水稻恰好構成一條青蛙行走路徑。

輸入

從標準輸入裝置上讀入資料。第一行上兩個整數R、C,分別表示稻田中水稻的行數和列數,1≤R、C≤5000。第二行是一個整數N,表示被踩 踏的水稻數量, 3≤N≤5000。在剩下的N行中,每行有兩個整數,分別是一顆被踩踏水稻的行號(1~R)和列號(1~C),兩個整數用一個空格隔開。而且,每棵被踩踏 水稻只被列出一次。

輸出

從標準輸出裝置上輸出一個整數。如果在稻田中存在青蛙行走路徑,則輸出包含最多水稻的青蛙行走路徑中的水稻數量,否則輸出0。

樣例輸入

6 7

14

2 1

6 6

4 2

2 5

2 6

2 7

3 4

6 1

6 2

2 3

6 3

6 4

6 5

6 7

樣例輸出

7

來源

1054

【思路】

  暴力列舉。

  1、存點後排序。

  2、暴力列舉前兩個點確定直線並判斷直線是否可行如果可行則更新ans

  需要注意:直線中如果有間斷則直線不可行。

【程式碼】

 1 #include<cstdio>
 2 #include<cstring>
 3
#include<algorithm> 4 using namespace std; 5 6 const int maxn = 5000+10; 7 struct Node{ 8 int x,y; 9 bool operator<(const Node&rhs) const{ 10 return x<rhs.x || (x==rhs.x && y<rhs.y); 11 } 12 }nodes[maxn]; 13 bool vis[maxn][maxn]; 14 int n,m,p; 15 16 bool inside(int x,int y) { 17 return x>=1 && x<=n && y>=1 && y<=m; 18 } 19 20 int main() { 21 scanf("%d%d%d",&n,&m,&p); 22 for(int i=0;i<p;i++) { 23 scanf("%d%d",&nodes[i].x,&nodes[i].y); 24 25 vis[nodes[i].x][nodes[i].y]=1; 26 } 27 sort(nodes,nodes+p); 28 int ans=0; 29 for(int i=0;i<p;i++) 30 for(int j=i+1;j<p;j++) { 31 int dx=nodes[j].x-nodes[i].x,dy=nodes[j].y-nodes[i].y; 32 if(inside(nodes[i].x-dx,nodes[i].y-dy)) continue; 33 int xx=nodes[j].x+dx,yy=nodes[j].y+dy; 34 if(!inside(xx,yy)) continue; 35 int cnt=2; 36 while(inside(xx,yy)){ 37 if(vis[xx][yy]) cnt++; 38 else { 39 cnt=0; 40 break; 41 } 42 xx+=dx,yy+=dy; 43 } 44 ans=max(ans,cnt); 45 } 46 printf("%d\n",ans); 47 return 0; 48 }

相關推薦

NOI1814 青蛙

1814:惱人的青蛙 總時間限制: 2000ms 單個測試點時間限制: 500ms 記憶體限制: 65536kB 描述 在韓國,有一種小的青蛙。每到晚上,這種青蛙會跳越稻田,從而踩踏稻子。農民在早上看到被踩踏的稻子,希望找到造成最大損害的那隻青蛙經過的路徑。每隻青蛙總是沿著一

NOI / 2.6基本算法之動態規劃 - 8471:切割回文

多少 ++i turn aac als return 得到 什麽 包含 總時間限制: 1000ms 內存限制: 65536kB描述 阿福最近對回文串產生了非常濃厚的興趣。 如果一個字符串從左往右看和從右往左看完全相同的話,那麽就認為這個串是一個回文串。例如,“abcaacb

noi1.8程式設計基礎之多維陣列:題解大禮包20180918

題目傳送門 以下是對noi題庫1.8的全部題解,有需要的同學請自行學習。 有任何錯漏或者疑問,請留言。謝謝~~~ 1、題目分析 2、程式碼截圖 1.8程式設計基礎之多為陣列 編號 題目 相對難度1-5 知識點 1 矩陣交換行 2

NOI地球人口承載力估計

因為地球上現有資源加上新生資源可供x億人生活a年,y億人生活b年,我們假設1單位的量為1億人生活1年的資源,然後我們只要輸入的兩者的差值即為最多養活的人數。 原始碼: #include<

NOI2.5 6264 走出迷宮

描述 當你站在一個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。 假設你已經得到了一個n*m的迷宮的圖紙,請你找出從起點到出口的最短路。 輸入

Openjudge NOI1.7程式設計基礎之字串 34:迴文子串

 總時間限制: 1000ms 記憶體限制: 65536kB 描述 給定一個字串,輸出所有長度至少為2的迴文子串。 迴文子串即從左往右輸出和從右往左輸出結果是一樣的字串,比如:abba,cccdeedccc都是迴文字串。 輸入一個字串,由字母或數字組成。長度500以內。

NOI--砝碼稱重V2(多重揹包2^n拆分)

以前只會寫多重揹包的原版,渣的不行,為了做此題不得不學習了一下,發現其實也不難,只要理解了方法就好多了(PS:其實和倍增挺像的) 8756:砝碼稱重V2 總時間限制: 1000ms 記憶體限制:

NOI答案(1.3 程式設計基礎之算術表示式與順序執行)

01:A+B問題 總時間限制: 1000ms        記憶體限制: 65536kB 描述 在大部分的線上題庫中,都會將A+B問題作為第一題,以幫助新手熟悉平臺的使用方法。 A+B問題的題目描述如下:給定兩個整數A和B,輸出A+B的值。保證A、B及結果均在

NOI3.6 1758二叉樹

描述 如上圖所示,由正整數1, 2, 3, …組成了一棵無限大的二叉樹。從某一個結點到根結點(編號是1的結點)都有一條唯一的路徑,比如從10到根結點的路徑是(10, 5, 2, 1),從4到根結點

Openjudge NOI1.11程式設計基礎之二分查詢04 網線管理

仙境的居民們決定舉辦一場程式設計區域賽。裁判委員會完全由自願組成,他們承諾要組織一次史上最公正的比賽。他們決定將選手的電腦用星形拓撲結構連線在一起,即將它們全部連到一個單一的中心伺服器。為了組織這個完全公正的比賽,裁判委員會主席提出要將所有選手的電腦等距離地圍繞在伺服器周圍放置。 為購買網線,裁判委員會

NOI答案(1.5 程式設計基礎之迴圈控制)(1—20

01:求平均年齡 總時間限制: 1000ms        記憶體限制: 65536kB 描述 班上有學生若干名,給出每名學生的年齡(整數),求班上所有學生的平均年齡,保留到小數點後兩位。 輸入 第一行有一個整數n(1<= n <= 100),表

NOI1.11程式設計基礎之二分查詢 矩形分割

03:矩形分割 總時間限制: 1000ms 記憶體限制: 65536kB 描述 平面上有一個大矩形,其左下角座標(0,0),右上角座標(R,R)。大矩形內部包含一些小矩形,小矩形都平行於座標

NOI1.5.18角谷猜想

總時間限制: 1000ms 記憶體限制: 65536kB 描述 所謂角谷猜想,是指對於任意一個正整數,如果是奇數,則乘3加1,如果是偶數,則除以2,得到的結果再按照上述規則重複處理,最終總能夠

Openjudge NOI2.4基本演算法之分治 7620:區間合併

 總時間限制: 1000ms 記憶體限制: 65536kB 描述 給定 n 個閉區間 [ai; bi],其中i=1,2,...,n。任意兩個相鄰或相交的閉區間可以合併為一個閉區間。例如,[1;2] 和 [2;3] 可以合併為 [1;3],[1;3] 和 [2;4] 可以

NOI-1526 宗教信仰

Description:世界上有許多宗教,你感興趣的是你學校裡的同學信仰多少種宗教。你的學校有n名學生(0 < n <= 50000),你不太可能詢問每個人的宗教信仰,因為他們不太願意透露。但是當你同時找到2名學生,他們卻願意告訴你他們是否信仰同一宗教,你可以通過

百練2812:青蛙

style using gif ret 青春 stream rac ring its 傳送門:http://bailian.openjudge.cn/practice/2812/ 【題解】 垃圾題目毀我青春。 暴力枚舉兩個點,判斷是否成立。 瞎jb判一判,剪剪枝就過了。 大

2812 青蛙(暴力搜索時根據問題優化判斷條件以加快搜索速度)

對象 sea 轉化 列數 函數 pla ecp 間隔 problem 題目鏈接: http://bailian.openjudge.cn/practice/2812 題目: 描述 在韓國,有一種小的青蛙。每到晚上,這種青蛙會跳越稻田,從而踩踏稻子。農民在早上看到被踩踏的稻子

百練2812 青蛙

此題關鍵是將所有點排序後,遍歷每次確保被選中的兩個點是一條青蛙路徑上最先被踩踏的兩個水稻。在遍歷點的過程中,要注意青蛙能夠從一側進入稻田,沿著直線一直跳,直到最後跳出稻田,如果青蛙連著跳了4個點,該條直線上的第5點還在稻田中,但是青蛙沒有踩踏,則該條路徑不合法,不能記錄青蛙當

計蒜客--三值排序

pac 一個數 順序 col 裏的 efault 開始 algo div 題目 排序是一種很頻繁的計算任務。一個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成升序的。 寫一個程序計算出,計算出的

簡簡單單搞掂的Laravel 5安裝

new ken use could not download lock program mda 啟動 想折騰下Laravel 5了。Laravel是這世界上最好且沒有之一的語言──PHP──的眾多框架中的一個,是我比較感興趣的PHP Web Framework。 但是安裝