洛谷CF1360E 多邊形

2021-10-06 19:15:36 字數 1728 閱讀 6594

思路分析

錯因分析

ac**

cf1360e

模擬普及/提高-

時間複雜度 o(n

2t

)o(n^2t)

o(n2t)

說實在,這一題其實很簡單。一道純模擬題。我們先來分析一下題目:「且遇到邊界後會停止,遇到乙個停止的子彈也會停止」。這個點可以說明每乙個子彈的最終座標只可能在邊界上,或者右方/下方有乙個子彈。如果這些條件都不滿足,這種答案是錯誤的。因為我們來想想,炮彈往右射出去,必定要碰到邊界和子彈才會停下來。可出現了還沒碰到邊際和子彈就停下來的情況是不可能的。所以只需判斷是否存在上述情況即可。當有出現這種情況時,則停止迴圈,輸出 nono

no。否則,輸出 yes

yesye

s 。從**來分析,首先要求輸入乙個邊長為 n

nn 的正方形矩陣,那每次迴圈只需要把這個矩陣的所有陣列迴圈一次就好了。先來分析一下在邊界的情況。如何判斷是否在邊界呢?其實很簡單。只要把矩陣的右面一層和下面一層全部用 1

11 掃過一邊就ok了。

//這些是用1掃過的

for(

int i=

1;i<=n;i++

)a[i]

[n+1]=

1;for(

int i=

1;i<=n;i++

)a[n+1]

[i]=

1;

把在矩陣範圍內的 1

11 判斷完畢就好了。出現這種情況的時候是右面和下面都為 0

00 的時候。這樣就簡單了。

bool g=

true

;//這個bool是用來判斷是否有出現 no 的情況

for(

int i=

1;i<=n&&g;i++

)for

(int j=

1;j<=n&&g;j++)if

(a[i]

[j]==1&&

!(a[i+1]

[j]==

1||a[i]

[j+1]==

1))if

(g)cout<<

"yes"

<0

0 都當做 1

11 來掃了,這樣是錯的!!!只有當前有子彈時才掃,沒子彈時掃了沒有意義。(似乎也就這乙個錯因)

#include

using

namespace std;

intmain()

,n; cin>>n;

for(

int i=

1;i<=n;i++

)for

(int i=

1;i<=n;i++

)a[i]

[n+1]=

1;for(

int i=

1;i<=n;i++

)a[n+1]

[i]=1;

for(

int i=

1;i<=n&&g;i++

)for

(int j=

1;j<=n&&g;j++)if

(a[i]

[j]==1&&

!(a[i+1]

[j]==

1||a[i]

[j+1]==

1))if

(g)cout<<

"yes"

<}return0;

}

洛谷 CF196A 題解

題目傳送門 讀入字串,求該串的最大字典序子串行。迴圈判斷只要當前字元比後面所有的字元的字典序大,就把這個字元存到另乙個字串中,最後和輸入的字串迴圈比較如果該字元和輸入時的是相同的,就輸出。因為比較字串的字典序是要從第乙個字元開始依次往後比較的,所以要想取到最大字典序子串行,就要倒著查詢!includ...

洛谷題解 CF4B Before an Exam

這道題一開始沒理解清楚題意,以為只要最後把每個時長隨機順序輸出來就行,結果。是我vegetable炸了。於是就重新寫。這是個比較典型的貪心題,我的思路就是先判斷這個peter 能不能活下來,能不能滿足要求。這個判斷是比較簡單的,如果要每一天都滿足要求的話,充要條件就是 sum sumtime sum...

洛谷 CF877D 題解

題目傳送門 給定乙個 n m 的迷宮和 k 然後給定起點和終點,每次可以像四個方向走 1 k 步 只能走.的格仔 求從起點到終點的最小時間,如不能到達輸出 1 這道題求的是最小時間,可以用 bfs 加剪枝來做,建乙個 stl 的佇列,把每次向外擴充套件的四個點分別判斷是否合法,如果沒有出界並且合法就...