赤峰打印机价格协会

Samsung今天的那道题我也没在网上搜到答案啊

張小帥04342022-01-19 09:38:23

input T

for i for 1 to T

    input n,m,k

    // n 作为矩阵的高 m作为矩阵的宽

    输入一个矩阵 元素值是0或者1

    要求对列做翻转 0变1 1变0

    必须执行k次 同一列可以执行多次

    翻转k次 之后 可以 得到 值 全1的行

    最多有多少 输出



    



网上搜到的解法

就是 用 bing 搜 “signal amplifier 算法”

搜到这样的做法



Signal Amplifier
描述:在N*M矩阵中,每个位置为0或1。现在一次操作可以把一列的数值取反。
求:k次操作后,全为1的最大行数
思路1:
Step 1. 对于每一行,首先区分它是否能在k次操作后变为全1。以下情况则不能: 1) k<这一行0的个数;2)k和这一行0的个数j的奇偶性不同
Step 2. 对于所有在某个特定k次操作后全为1的行,则它们的初始状态是完全一样的,因此题目所求转变为:求Step1中满足条件的行中,出现次数最多的行(由0/1组成的串),其出现次数。
思路2:用动态规划法求解
假设前n-1行在k次操作后,全为1的最大行数为f(n-1),则对于第n行来说,有
f(n) = f(n-1),如果k次操作不可能把第n行变为全一,分两种情况1) k<第n行0的个数;2)k和第n行0的个数j的奇偶性不同
否则,f(n) = max(f(n-1),f`(n)),其中f`(n)为把第n行变为全1的情况下,前n行全为1的行数



第二种思路没有看懂

我用第一种思路写的


代码里面的bug知道在哪了

但是没有改完


三个小时解一道题


其实还是可以


还有两次机会


那就再次和再再次迎接战役吧


我希望可以取得成功








肯德基也有人在创业


大半夜坐一圈人

讨论谁出多少钱 挣了多少钱 谁分多少股 等等


还有挨个桌子发糖的大姐

每天晚上都来

说什么自己做的糖在这里推销

说什么白天有别的工作

晚上出来卖糖


我不买


好的


她又给我一张什么东直门骨骼养护传单

这位大姐打了很多份工啊

很厉害啊 也是很厉害啊!




白姐姐 也 创业啊

他们都非常厉害

边神也非常厉害

大家都非常厉害啊




我今天写的代码的话大概就是


#include<iostream>

#define NMAX 101

#define MMAX 21

using namespace std;


int main(arg, **argc){  //it seems coding like this, I am not really sure about that

    

    int status[NMAX][MMAX];

    int countOfNeg = 0;    //count of negative

    int countOfEqualLine = 0; // 听说这些不能写成全局变量

    int result = 0;

    for( test_case = 1 ; test_case<= T; test_case++){

        cin>>n>>m>>k;

        for (int i= 0 ; i<n ; i++){

            for (int j=0 ; j<m ; j++ ){

                cin>>status[i][j];

                if (status[i][j] == 0) countOfNeg[i]++;

            }

        }

        for ( i = 0; i<n ; i++){

            if (countOfNeg[i] >= k &&(countOfNeg[i]%2 == k%2)){

                for ( j = 0 ; j<n ; j++){

                    if( status[j] == status[i]) countOfEqualLine++;

                    //not sure whether this code works or not

                    //I wrote as countOfNeg[i] == countOfNeg[j]

                    //which was  a totally wrong predicting condition

                    //yet we got scores as (32/50) and (64.8/100)

                    //that was emmmmm, have to say,

                    //a wrong solution

                }

            }

            result = max(result, countOfEqualLine);

            <span style="display: inline !important;float: none;background-color: transparent;color: rgb(0, 0, 0);font-family: " sans="" 0px;"="" gb","microsoft="" neue",helvetica,"hiragino="" helvetica="">countOfEqualLine = 0;

        }

        cout<<"#"<<test_case<<" "<<result<<endl;

    

    }

}


大概就是这样了吧

不知道这代码是否行啊

这点玩意下午考试的时候写了仨小时


刚才又写了一下当然就快很多了


也是很久没有写过C++了啊


不写就很熟练


太晚了 我回去睡觉了


00点44分 2018年6月6日 北京

KFC百环店


写码写到1AM

我也是很棒 啊!

我居然


不知道

(!root || root = p || root ==q)

的 第一个 !

是什么意思啊


流下了不学无术的眼泪