Блог пользователя code.with.nick

Автор code.with.nick, история, 3 недели назад, По-английски

So I learnt something new ,hence this blog

the blog is written wrt this question https://codeforces.com/contest/1980/problem/E

Logic: after taking the input I realised there will be atleast a 1 present in both matrices so If i sorted both matrices wrt the position of 1 in them then they will end up in the same position, and if they do then a can be always converted to b

In short (position of 1 in) [4X4]
matrix a    matrix b
    @         @
* * 1 *       @
    @       * 1 * *
    @         @
Step 1 :
sort col wrt row (compare 1 with @'s and swap rows accordingly)

matrix a    matrix b
* * 1 *     * 1 * *
    @         @
    @         @
    @         @
Step 2 :
sort row wrt col (compare 1 with *'s and swap cols accordingly)

matrix a    matrix b
1 * * *     1 * * *
@           @
@           @
@           @

now they will end up same (if could be transformed into one another by any number of ops)

ok now the hard thing was how to implement step 1 so i first found the column index of 1 in both matrixes stored them and passed this column index to my custom comparator class then I swapped the vectors wrt this column values

here is the code


class cmpr { int param; public: cmpr(int p) : param(p) {} bool operator()(vi x,vi y) { // logic uses param return x[param]>y[param]; } }; void nikhil(int testcase){ int n,m,j_ind; cin>>n>>m; vector<vector<int>> a(n,vector<int>(m)),b(n,vector<int>(m)); bool flag=true; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>a[i][j]; if(a[i][j]==1) { j_ind=j; } } } sort(a.begin(),a.end(),cmpr(j_ind)); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin>>b[i][j]; if(b[i][j]==1) { j_ind=j; } } } sort(b.begin(),b.end(),cmpr(j_ind));

Never thought I would be needing to pass argument to comparator function

Полный текст и комментарии »

  • Проголосовать: нравится
  • +2
  • Проголосовать: не нравится