很长,此处不放题目了

传送门

大模拟按照题意模拟

一点:

大模拟一定要把代码的条例写清晰了

//Author :cwb
#include<bits/stdc++.h>
#define ROW 16
#define COLUMN 30
using namespace std;
int dir[8][2]= {1,0, -1,0,0,1,0,-1,1,1,-1,-1,-1,1,1,-1};
class game
{
private:char mp[50][50];int ans1;int ans2;int ans3;int flag[50][50];int tmp[50][50];int turn[50][50];int sta[50][50];
public:explicit game();//读入图进行初始化void solve();void ops();void _3bv();void isls();void inter();
};
int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int _;game *new_game;scanf("%d",&_);while(_--){new_game= new game();new_game->solve();delete(new_game);}
}
game::game()
{memset(mp,0,sizeof(mp));for(int i=1; i<=ROW; i++){scanf("%s",mp[i]+1);}this->ans1=0;this->ans2=0;this->ans3=0;memset(this->tmp,0,sizeof(this->tmp));memset(this->sta,0,sizeof(this->sta));memset(this->turn,0,sizeof(this->turn));memset(this->flag,0,sizeof(this->flag));
}
void game::solve()
{this->ops();this->_3bv();this->isls();int __;scanf("%d",&__);while(__--){this->inter();}
}
void game::ops()
{int vis[50][50];memset(vis,0,sizeof(vis));queue<pair<int,int> > q;for(int i=1; i<=ROW; i++){for(int j=1; j<=COLUMN; j++){if(vis[i][j]==0&&mp[i][j]=='0'){this->ans1++;q.push(make_pair(i,j));vis[i][j]=1;while(q.size()){int xx=q.front().first;int yy=q.front().second;q.pop();for(int k=0; k<8; k++){int x=xx+dir[k][0];int y=yy+dir[k][1];if(vis[x][y]==0&&x>=1&&x<=ROW&&y>=1&&y<=COLUMN&&mp[x][y]=='0'){q.push(make_pair(x,y));vis[x][y]=1;}}}}}}printf("OPS=%d\n",this->ans1);
}
void game::_3bv()
{this->ans2+=this->ans1;//int tmp[50][50];memset(tmp,0,sizeof(tmp));for(int i=1; i<=ROW; i++){for(int j=1; j<=COLUMN; j++){if(mp[i][j]=='0'){tmp[i][j]=1;tmp[i+1][j]=1;tmp[i-1][j]=1;tmp[i][j+1]=1;tmp[i][j-1]=1;tmp[i-1][j-1]=1;tmp[i-1][j+1]=1;tmp[i+1][j-1]=1;tmp[i+1][j+1]=1;}}}for(int i=1; i<=ROW; i++){for(int j=1; j<=COLUMN; j++){if(tmp[i][j]==0&&mp[i][j]!='*') this->ans2++;}}printf("3BV=%d\n",this->ans2);
}
void game::isls()
{int vis[50][50];memset(vis,0,sizeof(vis));queue<pair<int,int> > q;for(int i=1; i<=ROW; i++){for(int j=1; j<=COLUMN; j++){if(vis[i][j]==0&&tmp[i][j]==0&&mp[i][j]!='*'){this->ans3++;q.push(make_pair(i,j));vis[i][j]=1;while(q.size()){int xx=q.front().first;int yy=q.front().second;q.pop();for(int k=0; k<8; k++){int x=xx+dir[k][0];int y=yy+dir[k][1];if(vis[x][y]==0&&x>=1&&x<=ROW&&y>=1&&y<=COLUMN&&tmp[x][y]==0&&mp[x][y]!='*'){q.push(make_pair(x,y));vis[x][y]=1;}}}}}}printf("ISLS=%d\n",this->ans3);
}
void game::inter()//交互部分
{int turn_num=0;int vis[50][50];memset(vis,0,sizeof(vis));//每次翻转标记int x,y,op;scanf("%d%d%d",&x,&y,&op);if((x<0||x>=ROW)||(y<0||y>=COLUMN)){printf("nothing happened\n");return;}x++;//坐标转换y++;int round=0;int double_ok=0;for(int i=0; i<8; i++){int xx=x+dir[i][0];int yy=y+dir[i][1];if(flag[xx][yy]==1){round++;}else if(turn[xx][yy]==0){double_ok=1;}}if(op==1){if(turn[x][y]==1||flag[x][y]==1){//wuxiaoprintf("nothing happened\n");}else//有效翻转{if(mp[x][y]=='*') //waigua{flag[x][y]=1;printf("hack found!\n");}else if(mp[x][y]=='0')//如果点到了空白 那么输出整个ops没被翻的{queue<pair<int,int> >q;q.push(make_pair(x,y));vis[x][y]=1;while(q.size()){turn_num++;int xx=q.front().first;int yy=q.front().second;turn[xx][yy]=1;flag[xx][yy]=0;q.pop();for(int k=0; k<8; k++){int xxx=xx+dir[k][0];int yyy=yy+dir[k][1];if(vis[xxx][yyy]==0&&xxx>=1&&xxx<=ROW&&yyy>=1&&yyy<=COLUMN&&mp[xxx][yyy]=='0'&&turn[xxx][yyy]==0&&flag[xxx][yyy]==0){q.push(make_pair(xxx,yyy));vis[xxx][yyy]=1;}else if(vis[xxx][yyy]==0&&xxx>=1&&xxx<=ROW&&yyy>=1&&yyy<=COLUMN&&turn[xxx][yyy]==0&&mp[xxx][yyy]!='0'&&flag[xxx][yyy]==0){vis[xxx][yyy]=1;turn[xxx][yyy]=1;turn_num++;}}}printf("left open %d\n",turn_num);}else{printf("left open 1\n");turn[x][y]=1;}}}else if(op==2){if(turn[x][y]==1){printf("nothing happened\n");}else{if(flag[x][y]==0){printf("flag+1\n");flag[x][y]=1;}else{printf("flag-1\n");flag[x][y]=0;}}}else//双击操作{if(turn[x][y]==0||flag[x][y]==1||round!=mp[x][y]-'0'||double_ok==0||mp[x][y]=='0'){printf("nothing happened\n");}else{int die=0;for(int i=0; i<8; i++){int xx=x+dir[i][0];int yy=y+dir[i][1];if(xx<1||xx>ROW||yy<1||yy>COLUMN) continue;if(mp[xx][yy]=='*'){if(flag[xx][yy]==0) die=1;flag[xx][yy]=1;}else if(turn[xx][yy]==0){flag[xx][yy]=0;if(mp[xx][yy]=='0')//如果点到了空白 那么输出整个ops没被翻的{queue<pair<int,int> >q;if(vis[xx][yy]==0&&mp[xx][yy]=='0'){q.push(make_pair(xx,yy));vis[xx][yy]=1;while(q.size()){
//                                    turn[xx][yy]=1;//被反转turn_num++;int xxx=q.front().first;int yyy=q.front().second;turn[xxx][yyy]=1;q.pop();for(int k=0; k<8; k++){int xxxx=xxx+dir[k][0];int yyyy=yyy+dir[k][1];if(vis[xxxx][yyyy]==0&&xxxx>=1&&xxxx<=ROW&&yyyy>=1&&yyyy<=COLUMN&&mp[xxxx][yyyy]=='0'&&flag[xxxx][yyyy]==0){q.push(make_pair(xxxx,yyyy));vis[xxxx][yyyy]=1;}else if(vis[xxxx][yyyy]==0&&xxxx>=1&&xxxx<=ROW&&yyyy>=1&&yyyy<=COLUMN&&turn[xxxx][yyyy]==0&&mp[xxxx][yyyy]!='0'&&flag[xxxx][yyyy]==0){vis[xxxx][yyyy]=1;turn[xxxx][yyyy]=1;turn_num++;}}}}}else{turn_num++;turn[xx][yy]=1;}}}if(die==0&&turn_num!=0)printf("double open %d\n",turn_num);else if(die==0)printf("nothing happened\n");elseprintf("hack found!\n");}}
//    for(int i=1;i<=ROW;i++)
//    {
//        for(int j=1;j<=COLUMN;j++)
//        {
//            printf("%d",turn[i][j]);
//        }
//        printf("\n");
//    }
}

庚子新年玩扫雷(模拟)(东北农业大学庚子新年欢乐赛)相关推荐

  1. 利用Python来玩扫雷,极致的思维体验

    529. 扫雷游戏 题目来源:力扣(LeetCode) https://leetcode-cn.com/problems/minesweeper 题目 让我们一起来玩扫雷游戏! 很多人学习python ...

  2. 计算机东北农业大学网上测试题,计算机应用与技术网上测试题主观题

    东北农业大学网络教育学院 计算机应用与技术网上测试题(主观题部分) 简答题(每题25分,共100分) 1. 在计算机的分类中,按计算机处理数据的方式分为几种?按计算机使用分类分为几种?按计算机的规模和 ...

  3. 东北农业大学农学院程晓非教授荣获植物病毒学国家“优青”资助

    2020年,东北农业大学农学院"80后"程晓非教授申报的"植物病毒学"获得国家自然科学基金优秀青年科学基金项目立项,资助金额120万元.该项目的获批实现了东北农 ...

  4. 东北农业大学程晓非团队发表植物病毒运动与复制相关综述文章

    近日,国际著名期刊<Traffic>(影响因子:4.038)在线发表了东北农业大学分子植物病毒学研究团队程晓非教授团队的题为"Intercellular movement of ...

  5. 东北农业大学网络教育计算机考试,THEOL网络教学综合平台-东北农业大学继续教育学院...

    变电工程设计 东北农业大学是全国高等农业院校中最早进行网络教育的院校之一.电气化自动化专业成立于1948年,<变电工程设计>课程前身是<农村发电厂变电站电气部分>,理论学时80 ...

  6. 网上农大计算机应用基础在线作业1答案,东北农业大学网络教育学院计算机应用基础网上作业题及答案.doc...

    . . 东北农业大学网络教育学院 计算机应用基础网上作业题及参考答案 第二章 Windows7操作系统及应用 选择题 1.计算机启动时,首先同用户打交道的软件是 在它的帮助下才得以方便.有效地调用系统 ...

  7. 东北农业大学大学计算机基础作业答案,大学计算机基础实践教学改革的研究

    针对目前大学计算机基础实践教学中存在的问题,提出了教学内容.教学方法.教学模式.考试形式等方面的改革方案,并在实践中不断践行和完善,达到预期的教学效果,为提高实践教学质量提供参考. 第 o第. 卷期 ...

  8. 东北农业大学考研计算机大纲,东北农业大学(专业学位)计算机技术研究生考试科目和考研参考书目...

    考研真题资料优惠价原价选择 东北农业大学(专业学位)计算机技术教材,也叫东北农业大学(专业学位)计算机技术考研参考书.指定书目等等,是考验专业课复习过程中最重要的资料.考研是一种针对性很强的考试项目, ...

  9. 东北农业大学考研计算机大纲,东北农业大学339农业知识综合一考研大纲

    东北农业大学339农业知识综合一考研大纲 2018年东北农业大学硕士研究生招生考研大纲 科目代码:339 科目名称:农业知识综合一 一.考试要求 主要考察考生掌握植物学基本概念.基本理论.包括植物的形 ...

  10. 计算机农业应用答案,东北农业大学计算机应用技术网上作业及答案.doc

    东北农业大学计算机应用技术网上作业及答案 计算机应用与技术网上测试题(主观题部分201605最新版) 满分100分 一.填空题(每题2分,共20分) 1.在Windows XP中,不能通过直接删除应用 ...

最新文章

  1. 正则表达式匹配多个字符(*、+、?、{m}、{m,n})
  2. Android开发之使用TabLayout快速实现选项卡切换功能(附源码下载)
  3. 《零基础看得懂的C++入门教程 》——(9)结构体原来如此
  4. 2021CSP:游记
  5. javascript基础修炼——手把手教你造一个简易的require.js
  6. Android 12发布!小米11全系、Redmi K40 Pro宣布首批支持
  7. Type 1120: Access of undefined property JSON 无法明确解析多名称引用 JSON
  8. 程序设计习惯养成计划---一、方法规约设计
  9. 【转】javascript弹出固定大小的窗口页面
  10. the art of seo(chapter seven)
  11. Java从入门到精通第一版(Java基础)
  12. Axure中使用fontawesome字体
  13. 【Arduino实验14 红外遥控】
  14. SQLite主键自动增长
  15. TrinityCore魔兽世界服务器-环境搭建(Debian11)
  16. [Sensor]LSM6DSL-加速度计、陀螺仪传感器
  17. AutoJs学习-读取手机短信
  18. 性能测试:深入理解并发量,线程数,吞吐量,TPS
  19. 独轮平衡车c语言源码,双轮平衡车程序 - 源码下载|嵌入式/单片机编程|源代码 - 源码中国...
  20. linux网络流量走高,linux-流量异常高怎么处理

热门文章

  1. 使用Scrum敏捷开发 —实现多维度碎片化迭代
  2. 【深度学习之美】山重水复疑无路,最快下降问梯度(入门系列之七)
  3. 方程组变换+初等变换+矩阵等价+克莱姆法则
  4. 网站服务器在本地是指,本地域名是什么意思?本地域名服务器在哪?
  5. Typhoon-v1.02渗透笔记
  6. python简单操作excel
  7. 应该像许三多学习的职业态度!
  8. Linux救援(rescue)模式知识点
  9. 止汗 咒语_咒语机器学习平台上线
  10. 如何查看电脑系统版本