目录
我要拿最多的Money(命题人:张毅)
题目背景
mincraft!!!
题目描述
在一款名为WC的游戏中,小朱同学创建了一个账号,众所周知小朱同学非常喜欢钱,于是在WC中,小朱同学偷偷潜入了小张同学的金库,小张同学非常生气,于是决定找到小朱同学并狠狠地教训他一顿,小张同学不知道小朱同学在哪个位置,于是决定用火把照亮一部分地方找到小朱同学,但是小朱同学非常狡猾,躲避了小张同学的火把照亮位置,并偷走了含有最多金币的箱子,请你根据小张同学的描述,推测一下小朱同学偷走的所有箱子里含有最多金币数量的箱子里的金币个数是多少; 如果小朱同学无法躲避小张同学火把的照亮,一枚金币都拿不到,则输出-1;
注:火把照亮的形状:
输入格式
第一行输入两个整数n,m,q,代表小张有n行,m列的箱子和扔了q个火把; 接下来输入n行,每行m个数据Aij,代表这个位置的箱子藏有多少金币(0<=Aij<=10000) 接下来q行给出x,y,代表这些地方被丢上了火把。 题目保证5<=n,m<=100,0<=q<=5000, 0<=x,y<n,m
输出格式
请输入出没有被火把照亮的地方中,小朱同学能偷走的箱子中含有最多金币数量的箱子里的金币个数是多少,数组下标从0开始
输入输出样例
输入
5 5 1 169 643 112 940 732 391 788 871 194 985 438 918 505 155 949 906 736 732 930 503 817 65 711 251 633 2 2
输出
985
源代码
模拟题,deal函数对于二维数组进行处理,凡是有火把照亮的地方金币数均清0,而后对于二维数组进行简单的遍历输出最大值即可,注意要用if语句判断,防止对于区间外的区域进行操作导致运行错误指针越界
#include <iostream>
using namespace std;
const int N = 1000 + 10;
int a[N][N];
int n,m,t;
void deal(int x,int y)//注意操作的区间范围,不能越界,只有位于合理区间才能继续操作
{
if(x - 2 >= 0 && x - 2 <= n)a[x - 2][y] = 0;//上上
if(x - 1 >= 0 && x - 1 <= n)
{
a[x - 1][y] = 0;//上
if(y - 1 >= 0 && y - 1 <= m)a[x - 1][y - 1] = 0;//上左
if(y + 1 >= 0 && y + 1 <= m)a[x - 1][y + 1] = 0;//上右
}
if(y - 2 >= 0 && y - 2 <= m)a[x][y - 2] = 0;//左左
if(y - 1 >= 0 && y - 1 <= m)a[x][y - 1] = 0;//左
if(y + 1 >= 0 && y + 1 <= m)a[x][y + 1] = 0;//右
if(y + 2 >= 0 && y + 2 <= m)a[x][y + 2] = 0;//右右
if(x + 1 >= 0 && x + 1 <= n)
{
a[x + 1][y] = 0;//下
if(y - 1 >= 0 && y - 1 <= m)a[x + 1][y - 1] = 0;//下左
if(y + 1 >= 0 && y + 1 <= m)a[x + 1][y + 1] = 0;//下右
}
if(x + 2 >= 0 && x + 2 <= n)a[x + 2][y] = 0;//下下
}
int main()
{
cin >> n >> m >> t;
//对于二维数组进行输入
for(int i = 1;i <= n;i ++ )
{
for(int j = 1;j <= m;j ++ )
{
cin >> a[i][j];
}
}
while(t -- )
{
int x,y;
cin >> x >> y;
deal(x + 1,y + 1);//火把处理照亮区域
}
int ans = -1;//用于查找最大值
for(int i = 1;i <= n;i ++ )
{
for(int j = 1;j <= m;j ++ )
{
ans = max(ans,a[i][j]);
}
}
if(ans == 0)ans = -1; //若一枚金币都找不到,即最大值为0
cout << ans << endl; //否则有解输出即可
return 0;
}
6男(命题人:朱奕锦)
题目描述
ZY看透了世态炎凉,对于社交以及爱情感觉十分疲倦,当听到他的好妹妹跟他说:“我想和你在稻城亚丁相遇、在丽江古城相拥、在巴黎铁塔相恋、在捷克布拉格相吻、在希腊爱琴海相爱、在往后余生相守”
他会敷衍一下扣一个6,时间长久之后,好妹妹感觉到十分生气,看见ZY扣6就想打他一巴掌,但是由于ZY频繁却又不连续的扣6,导致好妹妹感到为难,因为要是偶然的一次扣6就打ZY,她感到不太合适,于是好妹妹想要找到ZY扣的最多的一次6的个数,并以此为依据和ZY好好算账,你能帮好妹妹查找吗?
输入格式
ZY的消息,其长度L的范围为(0<=L<=1000)
输出格式
由6组成的字串的最大长度
输入输出样例
输入
6666asd6asda666sad6a6d666a66sd666666
输出
6
源代码
注意字符串中可能含有空格,不能使用scanf("%s",字符数组名);这个形式输入,而要使用gets(字符数组名);的形式,对于string类型,不能用cin进行输入,要用getline(cin,数组名);的形式,因为scanf("%s",字符数组名);和cin读到空格会自动截断,导致答案错误
#include <iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);
int ans = 0;
for(int i = 0;i < s.size();i ++ )
{
int j = i;
while(s[j] == '6'&&j < s.size())j ++ ;
ans = max(ans,j - i);
}
cout << ans << endl;
return 0;
}
极致到完美的AK(命题人:张毅)
题目描述
小朱同学与小张同学在玩游戏,他们玩的是非常古老且神秘有趣的石头剪刀布游戏,(为什么这俩人要玩这种游戏呢?我们不得而知),但是我们所知道的结果是,小张同学被 小朱同学以完美的姿态完全击败了,具体是:对于每一次小张同学的出击,小朱同学就将其击败,现在给你小张同学石头剪刀布的顺序,请给出小朱完美击败的顺序; 这里我们使用5对应布,2对应剪刀,0对应石头
输入格式
一行输出为小张同学的出击,长度不超过1000;
输出格式
小朱同学完美击败的顺序
输入输出样例
输入
520025
输出
205502
源代码
简单的对应关系,模拟即可
#include <iostream>
using namespace std;
int main()
{
string s;
cin >> s;
for(int i = 0;i < s.size();i ++ )
{
if(s[i] == '5')cout << '2';
else if(s[i] == '2')cout << '0';
else if(s[i] == '0')cout << '5';
}
return 0;
}
胡辣汤啊胡辣汤(命题人:朱奕锦)
题目背景
胡辣汤是河南的美食。。。
题目描述
ZYJ是胡辣汤狂热爱好者。ZYJ最最最喜欢胡辣汤了,因此他来到了河南工程学院西区餐厅一楼喝胡辣汤,但是时间久了学校的胡辣汤并不是特别的好喝,他想去校外喝点。正好赶上十一国庆节放假,比赛结束的他前往校外放松身心,由于这是他大学以来的第一次出校,因此他并不熟悉校园周围的胡辣汤店,也不知道那儿一家的胡辣汤味道最美加上他还是个路痴,只能通过缺德地图来导航,查看离他最近的胡辣汤店的地址,已知ZYJ会以河南工程学院抽象成一个四条边均与坐标轴平行}的矩形,在脑袋里面抽象出一个二维坐标系,而后将各个胡辣汤店看作一个坐标点,一个胡辣汤店到学校的最近距离定义为表示胡辣汤店的点与表示学校矩形上所有点(包括四条边上的点和四个顶点)的最小值如果有多个距离学校最近的胡辣汤店,ZYJ会选择其中编号最小的一个。到了校外,面对那么多的胡辣汤店,ZYJ将如何选择呢?请你帮助他选择
输入格式
第一行包含一个整数 n(1≤n≤10^5),表示胡辣汤店的个数。
第二行包含四个整数 X1,Y1,X 2,Y2 (−100≤X1<X2≤100,−100≤Y1<Y2≤100)
(X1,Y1) 表示河南工程学院左下角的坐标
(X2,Y2) 表示河南工程学院右上角的坐标。
接下来 n 行,第 i 行包含两个整数 xi ,yi(−100≤xi,yi≤100),表示编号为 i 的胡辣汤店的坐标为 (xi ,yi)。保证不会有胡辣汤店在河南工程学院的内部或边界上。
输出格式
输出一行一个整数,表示ZYJ选择的胡辣汤店编号。
输入输出样例
输入 #1复制
4 0 0 4 4 2 9 -4 -4 1 -6 8 7
输出 #1复制
1
说明/提示
样例解释
编号为 1 的胡辣汤店离河南工程学院的最近距离为 5
编号为 2 的胡辣汤店离河南工程学院的最近距离为 4倍根号二
编号为 3 的胡辣汤店离河南工程学院的最近距离为 6
编号为 4 的胡辣汤店离河南工程学院的最近距离为 5
在两个最近距离为 5 的胡辣汤店中,ZYJ会选择编号较小的 1 号胡辣汤店
源代码
改编自CCPC热身赛B题, 胡辣汤店的分布可以分为八种情况:左上、左、左下、下、右下、右、右上、上,那么我们可以将其优化为三种情况。
第一种情况为:胡辣汤店位于学校的正上方或者正下方,我们只需要计算纵坐标与边界之差即可
第二种情况为:胡辣汤店位于学校的正左边或者正右边,我们只需要计算横坐标与边界之差即可
第三种情况为:胡辣汤店位于左上、左下、右上、右下,计算其店到四个坐标店的最小距离即可
而后对于这么多店的距离和序号进行排序,排序规则定义为距离越小越优先,距离相等时,序号越小越优先,因此在我们进行排序完之后我们对于首位的序号进行输出即可
c ++ 解法
#include <iostream>
#include <vector> //动态数组
#include <cmath> //使用sqrt函数
#include <algorithm> //使用sort函数
using namespace std;
typedef pair<double,int> PII; // 创建一个数对数组,first元素存最近距离,second元素存对应序号
vector<PII> A;
int cmp(PII a,PII b) //自定义比较函数,重定向比较的条件为距离小优先,序号小优先
{
if(a.first != b.first) return a.first < b.first;
else return a.second < b.second;
}
int main()
{
ios::sync_with_stdio(false); //加快cin,cout的优化语句
cin.tie(0); //加快cin,cout的优化语句
int n;
cin >> n;
int x1,y1,x2,y2;
cin >> x1 >> y1 >> x2 >> y2;
for(int i = 1;i <= n;i ++ )
{
int x,y;
cin >> x >> y;
if(x >= x1 && x <= x2 )//当胡辣汤店位于学校正上方或者正下方时
{
double s = 0;
//最近距离等于纵坐标之差,注意不能为负
if(y > y2)s = y - y2;
else if(y < y1)s = y1 - y;
A.push_back({s,i});//计算完毕推入数对数组
}
else if(y >= y1 && y <= y2)//当胡辣汤店位于学校正左方或者正右方时
{
double s = 0;
//最近距离等于横坐标之差,注意不能为负
if(x < x1)s = x1 - x;
else if(x > x2)s = x - x2;
A.push_back({s,i});//计算完毕推入数对数组
}
else //当胡辣汤店位于学校的左上,左下,右上,右下时
{
double s1 = 0,s2 = 0,s3 = 0,s4 = 0;
s1 = sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));//计算离左下点的距离
s2 = sqrt((x - x2) * (x - x2) + (y - y1) * (y - y1));//计算离右下点的距离
s3 = sqrt((x - x1) * (x - x1) + (y - y2) * (y - y2));//计算离左上点的距离
s4 = sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));//计算离右上点的距离
double s = min(s1,min(s2,min(s3,s4)));
A.push_back({s,i});//计算完毕推入数对数组
}
}
sort(A.begin(),A.end(),cmp);//对其进行排序
cout << A[0].second << endl;//输出首位即可
return 0;
}
c语言解法(结构体排序)
#include <iostream>
#include <cmath> //使用sqrt函数
#include <algorithm> //使用sort函数
using namespace std;
struct HuLaTang
{
double s;
int idx;
};
HuLaTang A[100010];
int cmp(HuLaTang &a,HuLaTang &b) //自定义比较函数,重定向比较的条件为距离小优先,序号小优先
{
if(a.s != b.s) return a.s < b.s;
else return a.idx < b.idx;
}
int main()
{
int n;
scanf("%d",&n);
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
for(int i = 1;i <= n;i ++ )
{
int x,y;
cin >> x >> y;
if(x >= x1 && x <= x2 )//当胡辣汤店位于学校正上方或者正下方时
{
double s = 0;
//最近距离等于纵坐标之差,注意不能为负
if(y > y2)s = y - y2;
else if(y < y1)s = y1 - y;
A[i].s = s;
A[i].idx = i;
}
else if(y >= y1 && y <= y2)//当胡辣汤店位于学校正左方或者正右方时
{
double s = 0;
//最近距离等于横坐标之差,注意不能为负
if(x < x1)s = x1 - x;
else if(x > x2)s = x - x2;
A[i].s = s;
A[i].idx = i;
}
else //当胡辣汤店位于学校的左上,左下,右上,右下时
{
double s1 = 0,s2 = 0,s3 = 0,s4 = 0;
s1 = sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));//计算离左下点的距离
s2 = sqrt((x - x2) * (x - x2) + (y - y1) * (y - y1));//计算离右下点的距离
s3 = sqrt((x - x1) * (x - x1) + (y - y2) * (y - y2));//计算离左上点的距离
s4 = sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));//计算离右上点的距离
double s = min(s1,min(s2,min(s3,s4)));
A[i].s = s;
A[i].idx = i;
}
}
sort(A + 1,A + 1 + n,cmp);//对其进行排序
cout << A[1].idx << endl;//输出首位即可
return 0;
}
苦命的毅哥(命题人:朱奕锦)
题目背景
毅哥还没有女朋友...
题目描述
众所周知,ZY是一个非常喜欢漂亮妹妹的人,以至于ZYJ为了给他创造一些给漂亮妹妹接触的机会,常常在表白墙下面说:"我ZY就喜欢这个"或者"我ZY实名邀请您于圣源二楼就餐"替ZY对于校花进行表白,现在ZYJ想统计让ZY心态炸裂和emo的次数,例如:若是评论"我ZY就喜欢这个"出现一次,那么ZY心态炸裂一次,若是评论"我ZY实名邀请您于圣源二楼就餐出现"一次,那么ZYemo一次。已知表白墙下有n条消息(1<=n<=100),通过这n条消息来计算ZY心态炸裂的次数和emo的次数。注意:表白墙下面出现的不一定是ZYJ估计替ZY表白的话语
输入格式
一个正整数n
输出格式
张毅的心态炸裂次数和emo次数,中间用空格隔开,若是没有心态炸裂则输出0,若是没有emo则输出0,ZY有着事不过三的原则,若是他发现ZYJ使其心态炸裂和emo的总次数大于三次,ZY则原地化身"6男"在输出答案的下一行扣一个6
输入输出样例
输入
10 我ZY就喜欢这个 我ZY就喜欢这个 加强豹女!加强暴女!! 我ZY实名邀请您于圣源二楼就餐 我ZY把你搂了 我ZY就喜欢这个 诶呀你干嘛~~~ 我ZY实名邀请您于圣源二楼就餐 小黑子有本事别吃我哥哥下的蛋 我是真ikun
输出
3 2 6
源代码
字符串比较在c语言中只能只用#include <string.h>中的strcmp函数,strcmp(a,b) == 0时,二者相等,字符串在c ++ 中用string类型存储时,直接用等号即可,例如s == "我ZY就喜欢这个"
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
getchar();
int flag = 0,ans1 = 0,ans2 = 0;
while(n -- )
{
string s;
cin >> s;
if(s == "我ZY就喜欢这个")ans1 ++ ;
else if(s == "我ZY实名邀请您于圣源二楼就餐")ans2 ++ ;
}
if(ans1 + ans2 > 3)flag = 1;
cout << ans1 << ' ' << ans2;
if(flag == 1)cout << endl << 6;
return 0;
}
小朱要解析密码(命题人:张毅)
题目背景
原....为什么不原....我!!是神里凌华的狗!!!
题目描述
众所周知,小朱同学非常喜欢玩原神这款游戏,但是小朱同学实在是太菜了,以至于在新手村都打不过丘丘人,于是小朱决定努力提升自己的技术,这个时候他得到了一份笔记,这份笔记有杨,胡,王,关等等等等各位前辈大佬所留下,据说研习过此笔记者即可化身战神,打遍全图,于是小朱同学怀着敬畏之心查看笔记,两天之后小朱同学找到了小张同学并寻求帮助,原来要想研读这份笔记,还需要解出来前辈们留下的难题,但是小朱同学实在是太笨了,连这么一道简单的题目都不会做,小张同学仅仅是看过两眼就得到了正确答案,可恶的小张同学却不告诉小朱同学,于是他来寻找你获得帮助,请聪明的你帮助他解答吧:给你一串数字,请输出数字反转之后的结果:
输入格式
一串数字,长度在20以内,含前导0,去掉前导零后数字大小在long long int之内,也就是0-2的31次方-1,负号不用反转 ,负号不用反转,负号不用反转,重要的事情说三遍!!!
输出格式
一行输出数据反转后的结果
输入输出样例
输入 #1复制
310
输出 #1复制
13
输入 #2复制
-520
输出 #2复制
-25
说明/提示
任何数均有正负形式
源代码
注意任何数,0也有着0和-0两种形态和去掉前缀0
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> A;
int main()
{
string s;
cin >> s;
int flag = 1;
if(s[0] == '-')flag = 0;
for(int i = 0;i < s.size();i ++ )
{
if(flag == 0 && i == 0)continue;
int num = s[i] - '0';
A.push_back(num);
}
while(A.size() > 1 && A.back() == 0)A.pop_back();
reverse(A.begin(),A.end());
while(A.size() > 1 && A.back() == 0)A.pop_back();
if(flag == 0)cout << '-';
for(int i = 0;i < A.size();i ++ )cout << A[i];
return 0;
}
HF波那契数列(命题人:皇甫启新)
题目背景
HF在看lys努力的学习中……
题目描述
输入格式
输出格式
输入输出样例
输入
2 1 1 2 3 5 4
输出
2 8
说明/提示
对于 100% 的数据,有 T ≤ 10000, 1 ≤ i, j ≤ 100000, 0 ≤ Gi < 19960515
源代码
可以看出HF波那契数列的t的系数是对应的是当前位斐波那契数列的值,而其加的系数为前一位斐波那契数列的值,故可以得出fib[i] * t + fib[i - 1]= Gi,而后根据等价变式我们求得未知数是t,将式子变作t =(Gi - fib[i - 1]) / fib[i];那么根据我们计算出的公式,Gj就等于fib[i - 1] * t + fib[i];注意数据范围开long long,对19960515取模即可
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 100000 + 10;
ll fib[N];
int main()
{
fib[0] = 0;
fib[1] = 1;
for(int i = 2;i <= 100000;i ++ )fib[i] = (fib[i - 1] + fib[i - 2]) % 19960515;
int n;
scanf("%d",&n);
while(n -- )
{
int i,Gi,j;
scanf("%d%d%d",&i,&Gi,&j);
ll t =(Gi - fib[i - 1]) / fib[i];
if(t <= 0||(Gi - fib[i - 1]) % fib[i])cout << "-1" << endl;
else printf("%lld\n",((fib[j] * t) % 19960515 + fib[j - 1]) % 19960515);
}
return 0;
}
吃豆人(命题人:朱奕锦)
题目背景
吃豆人是电子游戏历史上的经典街机游戏,由Namco公司的岩谷彻设计并由Midway Games在1980年发行。Pac-Man被认为是80年代最经典的街机游戏之一,游戏的主角小精灵的形象甚至被作为一种大众文化符号,或是此产业的代表形象。它的开发商Namco也把这个形象作为其吉祥物和公司的标帜,一直沿用至今。该游戏的背景以黑色为主。画面中,“Google”6个字母组成回廊似的迷宫画面,四个颜色分别为红、黄、蓝、绿的鬼面符号在迷宫中穿梭,似乎在寻找一个半开半合的黄色圆圈符号。当按动键盘上的方位键时,发现该黄色圆圈符号可以行走,并且可以吞吃迷宫路径上的小黄豆,但遇到鬼面符号时就要被吃掉。
题目描述
小朱和小张比赛完之后立即开摆了,他们两个出校去干饭,遛弯的途中发现路边的一家游戏厅,出于好奇他们进去看了看,游戏厅老板十分欢迎其二人,如果二人能够在游戏当中操纵吃豆人吃到大金球,那么老板则奖励二人两瓶肥宅快乐水,否则二人则要付20RMB作为此次游戏的代价,由于吃豆人这个游戏小朱和小张从小就玩过,所以二者有着十足的信心赢取肥宅快乐水。此次吃豆人的移动规则则是本着只能向上、右、下、左移动的规律,现给出吃豆人起点坐标与大金球坐标以及m个墙(*)以及墙的坐标(墙的坐标可能会重叠),每次游戏在一个n * n的二维矩阵中进行,在其行进过程之中可以随意转弯,结果只有吃豆人吃到了大金球(赢)或者无论如何都无法吃到大金球(输)两种情况,现在老板请你作为他的助手,设计一个程序来判断小朱和小张的游戏结果,若是其二人赢得了比赛那么则输出Yes!,否则则输出No!,你作为小朱和小张的同学,当然希望他们赢得游戏,所以一旦出现含有空气的闭合环(已知可形成的最小环的边长为3)或者闭合非环(环至少缺四个角中的任意一角),你就可以为二人在闭合环或闭合非环上打通任意个缺口(非角处)以便二人赢得游戏,但是若是墙围成了一个不含空气的闭合环或者闭合非环,则无法为其作弊打通缺口,因为过于明显会被老板发现。提示:墙的坐标与起点大金球必定不重合,起点和大金球坐标必定不会靠着边界(空气状态:非墙、非起点、非大金球)
提示:
1.墙的坐标与起点或者大金球必定不重合
2.起点和大金球坐标必定不会靠着边界(空气状态:非墙、非起点、非大金球)
3.起点坐标和大金球坐标可能重合
4.闭合环与闭合环、闭合非环与闭合非环、闭合环与闭合非环之间可能会共用边,可以重合但不会叠加嵌套
输入格式
起点坐标sx,sy
终点坐标ex,ey
起点和大金球的坐标在矩阵内且不靠边界
一个正整数n,m(5<=n<=30)(0<=m<=30)
墙的坐标Xi,Yi(0<=Xi,Yi<=n<=30)
输出格式
Yes!或者No!
输入输出样例
输入
6 2 7 3 10 7 1 2 6 5 4 5 3 1 9 2 1 3 0 1
输出
Yes!
输入
2 6 3 9 15 20 1 6 3 7 2 9 4 9 3 4 3 8 3 7 5 4 3 10 3 8 8 1 2 7 9 5 6 13 2 5 8 9 14 8 10 4 12 7 3 6
输出
No!
说明/提示
样例一图解释:
样例二图解释:
源代码
由于闭合环和非闭合环有着可以公用边和重叠但是不可以嵌套的条件,这也就说明所有的闭合环和闭合非环纷纷是独立的,且只要不是实心的均可被打破,那么闭合环和闭合非环由于最小的边长为三,证明其最小的时候仅仅有一个芯,这个芯可以是起点也可以是大金球,所以这道题其实非常的简单,只要闭合环或者闭合非环存在且其的芯没有被填满,那么其就可被打烂,我们只需要判断起点和大金球的上下左右四个位置是否被封死即可,一旦二者有任意一个被封死,那么则无解,否则有解。注意特判:存在起点和大金球坐标重合的特殊情况
#include <iostream>
using namespace std;
const int N = 1000 + 10;
char a[N][N];
//偏移量数组
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int main()
{
int sx,sy,ex,ey;
cin >> sx >> sy >> ex >> ey;
a[sx][sy] = 'S';
a[ex][ey] = 'E';
int n,m;
cin >> n >> m;
while(m -- )
{
int x,y;
cin >> x >> y;
a[x][y] = '*';
}
int flags = 0;
int flage = 0;
for(int i = 0;i < 4;i ++ )//判断起点上下左右是否被封死
{
int X = sx + dx[i];
int Y = sy + dy[i];
if(a[X][Y] == '*')
{
flags ++ ;
}
}
for(int i = 0;i < 4;i ++ )//判断大金球上下左右是否被封死
{
int X = ex + dx[i];
int Y = ey + dy[i];
if(a[X][Y] == '*')
{
flage ++ ;
}
}
if(sx == ex && sy == ey)//起点与大金球重合的情况
{
cout << "Yes!";
return 0;
}
if(flags != 4 && flage != 4)cout << "Yes!";
else cout << "No!";
return 0;
}