[D] Easy One【链接】
非常简单的一道题;考察二维数组的最基本运用。把输入的矩阵上下左右均颠倒,然后输出这个矩阵。
1 2 3 9 8 7
4 5 6 -> 6 5 4
7 8 9 3 2 1
根本不需要在二维数组上动手脚,只要在写i、j的时候让它们倒着遍历即可;
输出的时候只要这样写:
所以代码就是:for(int i = n - 1; i >=0; i --)
{
for(int j = m - 1 ; j >=0; j --)
{
balabala...
}
}
#include<iostream> using namespace std; char pic[505][505]; int main() { int n,m,i,j; while(~scanf("%d%d",&n,&m)) { getchar(); for(i = 0 ; i < n; i ++) { for(j = 0 ; j < m; j ++) scanf("%c",&pic[i][j]); getchar(); } for(i = n - 1; i >= 0 ; i --) { for(j = m - 1; j >= 0 ; j --) printf("%c",pic[i][j]); printf("\n"); } } return 0; }
[E] Get Lost【链接】
题意就是,给你一个“迷宫”,迷宫上面的每一个点代表一个方向,走到了'E'这个点,那么你只能往矩阵的右边走,走到了‘N’这个点,代表接下来你只能往上走,等等。现在告诉你你的起始位置,那么就会有两种可能:①:一直走,最后走出矩形;
②:考虑如下矩形:
从左上角进入以后的路线如图,
因此问题就是回答能不能走出去,即“yes”或”no“。
这道题一个起点对应一个解,所以没有什么算法可言,就是模拟一下走路即可。设置两个数组,v[22][22]和t[22][22];
t[22][22]用于存放地图的信息,v[22][22]用于存放是否走过,就是说如果你当前在t[i][j]上,走一步以后,v[i][j] = 1;还是不太理解v数组的作用的话,你可以把这两个二维数组叠在一起,t上面放着v,立体一下,就好像v数组里面的值站立在t这个地图上一样。最后就是关键了,【i或者j小于0】 或者【i走出m列或者j走出n行】,意味着你走出去了,输出“yes”;如果你要走的下一个格子值是'1',代表什么意思知道了吧?就是你走到“曾经走过的”格子上了,这时候答案就是"no"了。
#include <cstdio> #include <iostream> using namespace std; int m, n; int v[22][22]; char t[22][22]; int mapwalk(int x, int y) { while (1) { if (x < 0 || y < 0 || x == m || y == n) return 1; if (v[x][y]) return 0; v[x][y] = 1; if (t[x][y] == 'N') x--; else if (t[x][y] == 'S') x++; else if (t[x][y] == 'W') y--; else if (t[x][y] == 'E') y++; } } int main() { //freopen("in.in", "r", stdin); //freopen("out.out", "w", stdout); while (~scanf("%d%d", &m, &n)) { int x, y; scanf("%d%d", &x, &y); memset(v, 0, sizeof(v)); for (int i = 0; i < m; i++) scanf("%s", t[i]); if (mapwalk(x, y)) printf("YES\n"); else printf("NO\n"); } return 0; }
[F] Large Wave of Leadership【链接】
这道题的意思是,有一个车队,前后衔接排成一排,每辆车的速度和车的长度各不相同,现在车队要通过一个地方,要求是车队不能断,就是说车与车之间不能分离,车队不能断,就是指所有的车同一个速度,那按照谁的速度呢?毫无疑问是按照最小速度,如此一来问题就变得相当简单了,输出最小速度*车队长度就是答案了。
#include<iostream> using namespace std; int main() { //freopen("in.txt","r",stdin); //freopen("data2.txt","w",stdout); int tot,n,sum,speed; while(~scanf("%d",&tot)) { int min =9999999; sum = 0; for(int i = 0 ; i < tot; i ++) { scanf("%d%d",&n,&speed); sum += n; if(min > speed) min = speed; } printf("%.2lf\n",sum*1.0/min); } return 0; }