CSU 1779 錯誤的演算法 矩陣 模擬

2022-03-22 19:18:31 字數 1821 閱讀 4353

有道題目是這樣的:

輸入乙個 n 行 m 列網格,找乙個格仔,使得它所在的行和列中所有格仔的數之和最大。如果答 案不唯一,輸出任意解即可。比如,在下面的例子中,最優解是(1,3),即第一行和的三列的交 點(行從上到下編號為 1~n,列從左到右編號為 1~m),所有 7 個數之和為 35。

快要比賽的時候,有乙個裁判想到了這樣乙個演算法:
首先找一行 r(1<=r<=n) 使得該行所有數之和最大,然後找一列 c(1<=c<=m) 使得該列 所有數之和最大,最後直接輸出(r,c)。如果有多個滿足條件的 r,輸出最小的 r。對 於 c 同樣處理。

顯然,這個演算法是錯的,但它竟然通過了大部分測試資料!你能找出那些讓這個錯誤演算法得到 正確結果的「弱」資料,以便裁判們改進這些資料嗎?

輸入包含不超過 100 組資料。每組資料第一行為兩個整數 n, m (1<=n<=500, 1<=m<=500),即行 數和列數。以下 n 行每行包含 m 個 1~100 的整數。輸入的總大小不超過 2mb。

對於每組資料,如果錯誤演算法能得到正確結果,輸出"weak",否則輸出"strong"。

4 4

5 5 5 5

1 1 5 1

1 1 5 1

1 1 5 1

5 42 5 1 1

1 1 9 1

1 1 1 1

1 1 1 1

1 1 1 1

case 1: weak

case 2: strong

湖南省第十一屆大學生計算機程式設計競賽

【**】:

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define long long ll

const

double pi = acos(-1.0

);const

double eps = 1e-6

;const

int inf = 0x3f3f3f3f

;const

int n = 100005

;int

n, m, tot;

int a[550][550

];int sum[5000][5000

];int r[550], c[550

];int x, y, pr, pc, k = 1

;int

main()

for(int i=1; i<=n; i++) //

if(r[i] >mr)

}for(int j=1; j<=m; j++) //

if(c[j] >mc)

}printf(

"case %d:

",k++);

//true

for(int i=1; i<=n; i++)}}

//false

int m = r[pr] + c[pc] -a[pr][pc];

if(m ==max)

else

/*測試**

for(int i=1; i<=n; i++)

cout

}

return0;

}

錯誤的演算法

有道題目是這樣的 輸入乙個 n 行 m 列網格,找乙個格仔,使得它所在的行和列中所有格仔的數之和最大。如果答 案不唯一,輸出任意解即可。比如,在下面的例子中,最優解是 1,3 即第一行和的三列的交 點 行從上到下編號為 1 n,列從左到右編號為 1 m 所有 7 個數之和為 35。快要比賽的時候,有...

使用NMS演算法去除目標中存在包含關係的矩形框

nms演算法 非極大值抑制演算法 的主要作用是通過搜尋區域性極大值的思想來實現,主要的實現步驟可以分為以下幾個步驟 1 設定目標框的置信度閾值,常用的閾值為0.5左右。2 根據置信度排序排列候選框列表。3 選取置信度最高的框a新增到輸出列表,並將其從候選框的列表中刪除。4 計算a與候選框列表中的所有...

NOJ 1641錯誤的演算法

昨晚做到十二點,經過cyw大神的耐心教導 好吧我還是沒聽懂 後來去睡覺時又想了一會兒,知道了大神所說的不許要求正確解的意義 只要求正確解對應的sum即可 因為粗心忽略了題中的條件解可以為多個。因此只需證明題中裁判演算法所給的解只是運氣成分,碰巧正確而已。尼瑪早上起來開啟筆記本改了下 果然ac了。我藥...