有道題目是這樣的:
輸入乙個 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 45 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了。我藥...