標籤:style blog http color os io for art
這2天 做的都是有關矩陣的 =-=....
小小矩陣 竟然有這麼多 花頭...
這題 的特點是 We can swap any two columns any times 就是可以任意交換X列與Y列 任意次
一開始 我還擔心我的方法 會不會tle 看到3000ms就放心了。。。我總覺得 會有更高效的方法 可惜我還沒想到
我的思路 就是 假如當前第X行共Y列 高度分別是 3 4 5 2 3 6
那麼高度>=2的就是6-0個 這個共6列 0可以看成是(cnt[0] + cnt[1] )之和 你可以假設我們也擺放了高度為0 與 1的柱形體0個
同理 高度>=3的就是6-1個...
那麼 我就是用這個方法進行計算的 蠻簡單的 就是會有一些細節注意處理就好了 如 cnt[]數組在每一行都應該重設為0 因為每行的h[]數組都是在變化的
--------------其實沒那麼多好扯的 =-= 我先把程式碼後置了 如果現在沒做出來 可以做下看 ~
1 #include <iostream> 2 using namespace std; 3 4 const int size = 1010; 5 char str[size]; 6 int h[size]; 7 int cnt[size]; 8 9 int main()10 {11 cin.sync_with_stdio(false);12 int n , m , ans , sum , maxH , area;13 while( cin >> n >> m )14 {15 memset( cnt , 0 , sizeof(cnt) );16 memset( h , 0 , sizeof(h) );17 ans = 0;18 for( int i = 1 ; i<=n ; i++ )19 {20 maxH = sum = 0;21 cin >> str;22 for( int j = 0 ; str[j]!=‘\0‘ ; j++ )23 {24 if( str[j]==‘1‘ )25 h[j+1] ++;26 else27 h[j+1] = 0;28 cnt[ h[j+1] ] ++;29 if( maxH < h[j+1] )30 maxH = h[j+1]; 31 }32 for( int k = 0 ; k<=maxH ; k++ )33 {34 if( cnt[k]!=0 )35 {36 area = k * (m-sum);37 sum += cnt[k];38 if( area>ans )39 ans = area;40 }41 cnt[k] = 0;42 }43 }44 cout << ans << endl;45 }46 return 0;47 }View Code