ZOJ 2058 The Archaeologist's Trouble II
发布日期:2021-05-07 12:48:16 浏览次数:27 分类:精选文章

本文共 2032 字,大约阅读时间需要 6 分钟。

题目传送门:
思路来自:

最大值:尽量多的往'?'中填充'@'并且要保证'@'和'*'号间隔出现,最终'@'的个数就是最大值;

最小值:尽量多的往'?'中填充
'*'并且要保证'@'和'*'号间隔出现,最终'@'的个数就是最大值;
#include 
#include
#include
using namespace std;const int maxn =110;int main(){ int n; char a[maxn][maxn]; char b[maxn][maxn]; while(scanf("%d\n",&n)&&n>0) //之前wa了8次,最后才发现错在少加了'\n'. { for(int i=1; i<=n; i++) { gets(b[i]+1); } memcpy(a,b,sizeof(b)); int max=0,min=0; //求最大值 if(a[1][1]!='*') a[1][1]='@'; for(int i=2; i<=n; i++) { for(int j=1; j<=i; j++) { if(a[i][j]=='?') { if((j==0&&a[i][j+1]!='@')||(j==i-1&&a[i][j-1]!='@')) { a[i][j]='@'; } else if(a[i][j+1]!='@'&&a[i][j-1]!='@') { a[i][j]='@'; } else a[i][j]='*'; } } } for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { if(a[i][j]=='@') max++; } } //求最小值 if(b[1][1]!='@') b[1][1]='*'; for(int i=2; i<=n; i++) { for(int j=1; j<=i; j++) { if(b[i][j]=='?') { if((j==0&&b[i][j+1]!='*')||(j==i-1&&b[i][j-1]!='*')) { b[i][j]='*'; } else if(b[i][j+1]!='*'&&b[i][j-1]!='*') { b[i][j]='*'; } else b[i][j]='@'; } } } for(int i=1;i<=n;i++) { for(int j=1;j<=i;j++) { if(b[i][j]=='@') min++; } } cout<
<<' '<
<
上一篇:HDU 1045 Fire Net
下一篇:HDU 1009 FatMouse' Trade

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年03月19日 02时29分57秒