一题都没过啊,菜上天的
A. Sagheer and Crossroads
这题直接小模拟爆一下
题意大概是一个十字路口,有四个红绿灯灯,分别是左转l,直走s,右转r,和行人p,1是绿灯,0是红灯,问给一张亮灯图判断是否被撞
int l[5], s[5], r[5], p[5];
int main()
{
for (int i = 1; i <= 4; i++)
scanf("%d%d%d%d", &l[i], &s[i], &r[i], &p[i]);//输入写错一个数组名
if ((l[1]&&p[1]) || (p[1]&&s[1]) || (p[1]&&r[1]) || (l[1]&&p[4]) || (s[1]&&p[3]) || (r[1]&&p[2]) )
printf("YES\n");
else if ( (l[2]&&p[2]) || (p[2]&&s[2]) || (p[2]&&r[2]) || (l[2]&&p[1]) || (s[2]&&p[4]) || (r[2]&&p[3]) )
printf("YES\n");
else if ( (l[3]&&p[3]) || (p[3]&&s[3]) || (p[3]&&r[3]) || (l[3]&&p[2]) || (s[3]&&p[1]) || (r[3]&&p[4]) )
printf("YES\n");
else if ( (l[4]&&p[4]) || (p[4]&&s[4]) || (p[4]&&r[4]) || (l[4]&&p[3]) || (s[4]&&p[2]) || (r[4]&&p[1]) )//写错了两个数字。。。shit
printf("YES\n");
else printf("NO\n");
}
B. Sagheer, the Hausmeister
关掉整座楼的灯,可以DP,但是楼层才15层,直接dfs暴力就可以了
input
3 4
001000
000010
000010//1是灯亮
左右两列全是0的是楼梯,上下楼只能走楼梯,耗时1s
output
12//需12秒关完
int Map[15][105];
int dis[15][2];//最靠近两侧的灯,分两层分别记录左右
char b[15];
int n, m;
int last;
int dfs(int x, int y)
{
if(x == last) return dis[x][y]/2;
int res = dfs(x-1, !y) + m + 1;
int ans = dfs(x-1, y) + dis[x][y];//以上两句分别从两个搜
res = min(res, ans); //往左还是往右走
res++;
return res;
}
int main()
{
scanf("%d%d", &n, &m);
last = n-1;
for(int i = 0; i < n; i++)
{
scanf("%s", b);
for (int j = 0; j < m+2; j++)
Map[i][j] = b[j] - '0';
}
for(int i = 0; i < n; i++)
{
int k = 0;//从左扫
for(int j = 0; j < m+2; j++)
{
if(Map[i][j]) k = j;//记录离左端最远的灯的位置
}
dis[i][0] = k*2;//到离左端最远的灯的往返步数
k = m+1;//从右扫
for(int j = m+1; j >= 0; j--)
{
if(Map[i][j]) k = j;//记录离右端最远的灯的位置
}
dis[i][1] = (m+1-k)*2;//到离右端最远的灯的往返步数
}
for (int i = 0; i < n; i++)
if (dis[i][0])
{
last = i;break;//找到第一个有灯亮的楼层
}
printf("%d\n", dfs(n-1, 0));//从n-1搜
}
D. Sagheer and Kindergarten
待补充
E. Sagheer and Apple Tree
SG博弈变形(数值处理上变了一下),待补充
今天的题不大好懂,主要还是英语烂的缘故吧
太菜了,以后加油,不能偷懒了