錯誤的演算法

2021-08-07 03:09:38 字數 1565 閱讀 1770

有道題目是這樣的:

輸入乙個 

n 行 

m 列網格,找乙個格仔,使得它所在的行和列中所有格仔的數之和最大。如果答 案不唯一,輸出任意解即可。比如,在下面的例子中,最優解是

(1,3)

,即第一行和的三列的交 點(行從上到下編號為

1~n,列從左到右編號為 

1~m),所有 

7 個數之和為 35。

快要比賽的時候,有乙個裁判想到了這樣乙個演算法:
首先找一行 

r(1<=r<=n) 

使得該行所有數之和最大,然後找一列 

c(1<=c<=m) 

使得該列 所有數之和最大,最後直接輸出

(r,c)

如果有多個滿足條件的r,輸出最小的r。對 於c同樣處理。

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

input

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

output

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

sample input

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

sample output

case 1: weak

case 2: strong

直接暴力。

#include#include#include#includeusing namespace std;

int n,m;

int a[550][550];

int f()

for(b=1; b<=m; b++)

sum-=a[i][j];

if(sum>maxn)}}

return maxn;

}int main()

}printf("case %d: ",k);

k++;

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

if(sum1>max1)

}for(i=1; i<=m; i++)

if(sum2>max2)

}int ans;

ans=max1+max2-a[t1][t2];

sum=f();

if(sum==ans)

else if(sum>ans)}}

NOJ 1641錯誤的演算法

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

演算法(6)桶排序 錯誤

bucket sort 現在假設我有一堆蛋,包括麻雀蛋 雞蛋 恐龍蛋,現在我要將這幾種蛋排序下序 有點常識就知道,這三種類別的蛋大小是不一樣的,而且每一類蛋的大小也是有區別的,現在我對這三種蛋進行排序,我是這樣排的 準備三個桶,把同一類別的蛋放到同乙個桶中,然後對每乙個桶內的蛋進行排序,然後按順序從...

省賽模擬一 錯誤的演算法

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