省賽模擬一 錯誤的演算法

2021-08-03 14:26:13 字數 1472 閱讀 7740

有道題目是這樣的:

輸入乙個 

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

1.求出最優解和錯誤演算法的解
2.比較最優解和錯誤演算法的解
#include #include #include #include #define maxn 1111111

int a[666][666];

int m,n;

int main()

{ int t=0,i,j,k;

long long sumi[666],maxi,maxj,sumj[666],mi,mj,max; //i 行 j列

while(~scanf("%d%d",&m,&n))

{t++;

mi=maxi=0;

for(i=0;i

2019 藍橋杯省賽 B 組模擬賽(一)

d.結果填空 馬的管轄 e.填空 lis f.程式設計 找質數 思路 因為時間複雜度的問題,o n n 的時間複雜度可能會超時,可以選擇的篩選素數的方法有埃氏篩法o n logn 尤拉篩法,這裡選的是尤拉篩法o n 直接遍歷找兩個素數相加等於n 因為要求字典樹最小,所以不會超時 ac include...

2018 藍橋杯省賽 B 組模擬賽(一)

給你乙個序列,請你在其中求出一段最長嚴格上公升的部分,它不一定要連續。include includeusing namespace std int f 10000 b 10000 int lis int n res max res,f i return res 1 int main printf d...

2019 藍橋杯省賽 A 組模擬賽(一) 修建公路

題目 蒜頭國有 nn 座城市,編號分別為 0,1,2,3,n 1。編號為 x和 y的兩座城市之間如果要修高速公路,必須花費 x y個金幣,其中 表示二進位制按位或。吝嗇的國王想要花最少的 修建高速公路,使得所有城市可以通過若干條高速公路互相達到。現在請你求出 n 2019時,一共有多少不同的方案,能...