P7059 [NWRRC2015]Lucky Chances题解
Updata 再次阅读完题解攻略后对题解进行格式和代码注释的修改
一个名为幸运的机会的游戏,根据图片的提示,我们选择模拟。模拟大法好
这篇题解主要讲一下这道题的细节。
-
扫描某个方向是全是严格小于选择方块的数,等于的不算
-
不是方块所在的横或者列。
-
可以选择方格某一方向(当然不包括此方格)逐个枚举,若有一个方块
\geq 当前选择方块则此方向 pass -
关于边界的处理,其实此题可以不做过多处理。
ACCode:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int Map[1100][1100];
//建议大家不要同“Map”这样设置变量名,容易让人产生歧义而想起STL中的map;希望大家可以避免错误。
int ans=0;//ans存储答案
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin>>Map[i][j];
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
bool k=false;
for(int l=i-1; l>=1; l--) {
if(Map[l][j]>=Map[i][j]) {
k=true;
break;
}
}
if(k==false) {
ans++;//某一方向达成条件
} else {
k=false;
}
for(int l=j-1; l>=1; l--) {
if(Map[i][l]>=Map[i][j]) {
k=true;
break;
}
}
if(k==false) {
ans++;
} else {
k=false;
}
for(int l=i+1; l<=n; l++) {
if(Map[l][j]>=Map[i][j]) {
k=true;
break;
}
}
if(k==false) {
ans++;
} else {
k=false;
}
for(int l=j+1; l<=m; l++) {
if(Map[i][l]>=Map[i][j]) {
k=true;
break;
}
}
if(k==false) {
ans++;
} else {
k=false;
}
}
}
printf("%d\n",ans);
return 0;
}
qwq蒟蒻第一次独立发题解祭祀