打卡信奥刷题(3214)用C++实现信奥题 P8221 [WFOI - 02] I wanna reverse to reserve(翻转)
P8221 [WFOI - 02] I wanna reverse to reserve翻转题目背景君子不器“我最擅长解谜了你说是吧kid。”“嗯…”题目描述kid 走进了一个nnn行mmm列的矩阵不保证矩阵中有nnn个数字111nnn个数字222…\dots…,nnn个数字mmm但n,mn,mn,m均为偶数。现有两种改变矩阵的方式选择任意一行将这一行上的数翻转选择任意一列将这一列上的数翻转。每次操作可以选择任意一种方式。现在需要通过若干次操作将矩阵变为$$n;行\left{\begin{array}{l}1\quad2\quad3\quad\cdots\quad m\\1\quad2\quad3\quad\cdots\quad m\\\cdots\\1\quad2\quad3\quad\cdots\quad m\\end{array}\right.$$这样才会出现下一个存档点。你需要帮 kid 解决这个问题。你只需要给出答案剩下的操作就交给 Uvocde 吧输入格式第一行两个正整数nnn和mmm以下nnn行每行mmm个正整数表示该矩阵。输出格式第一行一个字符串若不可能有可行的操作方式则输出NO否则输出YES如果输出YES下一行输出一个非负整数ansansans表示一种共需要ansansans次操作。接下来输出ansansans行每行一个字符和一个数kkk中间有空格这个字符表示这一次操作是翻转行还是翻转列若是对某一行进行翻转则为0若翻转某一列则为1kkk表示翻转第几行或是第几列。若存在可行方案则只需输出一组可行解即可不需要使ansansans最小但你要使ans≤n×mans \le n \times mans≤n×m。本题采用SPJ\text{SPJ}SPJ只要翻转操作正确即可给分。输入输出样例 #1输入 #12 4 1 2 3 4 4 3 2 1输出 #1YES 1 0 2输入输出样例 #2输入 #22 4 1 2 3 4 4 1 3 2输出 #2NO说明/提示【数据范围】本题采用 Subtask 捆绑测试。Subtask #0 (20pts)\texttt{Subtask \#0 (20pts)}Subtask #0 (20pts)最多只有222个数不在规定位置上Subtask #1 (20pts)\texttt{Subtask \#1 (20pts)}Subtask #1 (20pts)n2n2n2Subtask #2 (20pts)\texttt{Subtask \#2 (20pts)}Subtask #2 (20pts)m2m2m2Subtask #3 (40pts)\texttt{Subtask \#3 (40pts)}Subtask #3 (40pts)1≤n≤1001\le n\le 1001≤n≤1001≤m≤1001\le m\le 1001≤m≤100全部数据满足1≤n≤1001\le n\le 1001≤n≤1001≤m≤1001\le m\le 1001≤m≤100。C实现#includebits/stdc.h#definerereturnusingnamespacestd;intn,m,k,a[105][105],T,b[10005],c[10005],i,j,g;intmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cinnm;for(i1;in;i)for(j1;jm;j)cina[i][j];for(i1;in/2;i)for(j1;jm/2;j){if((a[i][j]!ja[i][j]!m-j1)||(a[i][m-j1]!ja[i][m-j1]!m-j1)||(a[n-i1][j]!ja[n-i1][j]!m-j1)||(a[n-i1][m-j1]!ja[n-i1][m-j1]!m-j1)||((a[i][j]j)(a[i][m-j1]j)(a[n-i1][j]j)(a[n-i1][m-j1]j)!2)){coutNO\n;re0;}a[i][j](a[i][j]j);a[i][m-j1](a[i][m-j1]j);a[n-i1][j](a[n-i1][j]j);a[n-i1][m-j1](a[n-i1][m-j1]j);}if(n1)for(j1;jm;j)if(a[n/21][j]!j){coutNO\n;re0;}if(m1)for(i1;in;i)if(a[i][m/21]!m/21){coutNO\n;re0;}for(i1;in/2;i)for(j1;jm/2;j){ka[i][j]*1000a[i][m-j1]*100a[n-i1][j]*10a[n-i1][m-j1];if(k1100){b[T]0;c[T]n-i1;b[T]1;c[T]m-j1;b[T]0;c[T]n-i1;for(g1;gn/2;g)swap(a[g][m-j1],a[n-g1][m-j1]);}elseif(k1001){b[T]1;c[T]m-j1;b[T]0;c[T]n-i1;b[T]1;c[T]m-j1;b[T]0;c[T]n-i1;}elseif(k110){b[T]1;c[T]m-j1;b[T]0;c[T]i;b[T]1;c[T]m-j1;b[T]0;c[T]i;}elseif(k101){b[T]0;c[T]n-i1;b[T]1;c[T]j;b[T]1;c[T]m-j1;b[T]0;c[T]n-i1;for(g1;gn/2;g)swap(a[g][j],a[n-g1][j]),swap(a[g][m-j1],a[n-g1][m-j1]);}elseif(k11){b[T]0;c[T]i;b[T]1;c[T]m-j1;b[T]0;c[T]i;for(g1;gn/2;g)swap(a[g][m-j1],a[n-g1][m-j1]);}}coutYES\nT\n;for(i0;iT;i)coutb[i] c[i]\n;return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容