有道題目是這樣的:
輸入乙個
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 4sample output5 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: weakcase 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。快要比賽的時候,有...