思路分析
錯因分析
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 的佇列,把每次向外擴充套件的四個點分別判斷是否合法,如果沒有出界並且合法就...