消消乐 ac代码 (C++) #include<iostream> #include<algorithm> #include<vector> #include<unordered_map> using namespace std; int res=0; bool check(vector<vector<char> >& ditu) {     vector<vector<int>> jilu;     int m = ditu.size();     int n = ditu[0].size();     bool xiaochu = false;     //先从行找     for(int i=0;i<m;i++)     {         for(int j=0;j<=n-3;)         {             if(ditu[i][j] == '0')             {                 j++;                 continue;             }             int k=j;             while(k<n&&ditu[i][k]==ditu[i][j]) k++;             if(k-j>=3)             {                 vector<int> onejilu{i,j,i,k-1};                 jilu.push_back(onejilu);                 xiaochu = true;             }             j = k;         }     }     //从列开始找     for(int i=0;i<n;i++)     {         for(int j=0;j<=m-3;)         {             if(ditu[j][i] == '0')             {                 j++;                 continue;             }             int k=j;             while(k<m&&ditu[k][i] == ditu[j][i]) k++;             if(k-j>=3)             {                 vector<int> onejilu{j,i,k-1,i};                 jilu.push_back(onejilu);                 xiaochu = true;             }             j=k;         }     }     //消除     for(auto one:jilu)     {         int x1=one[0],y1=one[1],x2=one[2],y2=one[3];         if(x1==x2)         {             for(int i=y1;i<=y2;i++)                 ditu[x1][i] = '0';         }         else //y1==y2         {             for(int i=x1;i<=x2;i++)                 ditu[i][y1] = '0';         }     }     return xiaochu; } void down(vector<vector<char> >&  ditu) {     int m = ditu.size();     int n = ditu[0].size();     //从第一行开始     for(int i=1;i<m;i++)     {         for(int j=0;j<n;j++)         {             if(ditu[i][j] == '0')             {                 //cout<<"in down"<<endl;                 int cengshu = i;                 while(cengshu-1>=0&&ditu[cengshu-1][j]!='0')                 {                     ditu[cengshu][j] = ditu[cengshu-1][j];                     cengshu--;                 }                 ditu[cengshu][j] = '0';             }         }     } } int main() {     int m,n;     cin>>m>>n;     int x1,y1,x2,y2;     vector<vector<char> >  ditu(m,vector<char>(n));     for(int i=0;i<m;i++)         for(int j=0;j<n;j++)             cin>>ditu[i][j];     cin>>x1>>y1>>x2>>y2;     int orizero=0;     for(int i=0;i<m;i++)         for(int j=0;j<n;j++)             if(ditu[i][j]=='0')                 orizero++;     swap(ditu[x1][y1],ditu[x2][y2]);     down(ditu);     while(check(ditu))         down(ditu);     int nowzero=0;     for(int i=0;i<m;i++)         for(int j=0;j<n;j++)             if(ditu[i][j] =='0')                 nowzero++;     cout<<nowzero-orizero<<endl; }
点赞 评论

相关推荐

暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务