Manipulating the Power Square hdu2598(居然是题目看错了)
2010-05-16 11:32
99 查看
/*
终于AC了,看来我读题的能力还是很欠缺啊!!
The command ”MOVE” is followed by one more more moves:
If move attempts to swap 0 with a non-existent neighbor, then output ”FAILED” on a single line
and stop attempting the remaining moves.
题目没有读懂就做题目是致命的错误啊
(
MOVE right up 比如不能right可以up 那么得到的
还是原来的 up没变(就是failed就break掉了)
)
谢文策大人给我分析了,我才明白的我题目读错了,好纠结
这次的比赛让我受益匪浅!
我读题的能力是完全欠缺的,代码的水平应付一些水题简单的算法题应该没有问题的
可是为何比赛的时候总是那么不理想呢?想想原因吧
*/
#include<iostream>//2460100 2010-05-16 10:57:25 Accepted 2598 0MS 324K 2865 B C++ 悔惜晟
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
//int dir[4][2] = {{-1 ,0}, {0, -1}, {0, 1}, {1 , 0}};
int main()
{
int n, i, j;
char str[2000];
int map[105][105];
int map1[105][105];
int x0, y0;
int x1, y1;
int num;
int len ;
//while(scanf("%d", &n) != EOF)
//while(1)
///while(scanf("%s", str) != EOF)
while(gets(str))
{
// memset(map, 0, sizeof(map));
// scanf("%d", &n);
// getchar();
if(str[0] >= '0' && str[0] <= '9')
{
n = 0;
len = strlen(str);
for(i = 0; i < len; i++)
{
n = 10 * n + str[i] - '0';
}
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{
scanf("%d", &map[i][j]);
if(map[i][j] == 0)
{
x0 = i;
y0 = j;
}
map1[i][j] = map[i][j];
}
getchar();
continue;
}
else if(strcmp(str, "SHOW") == 0)
{
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(j == n - 1)
printf("%d", map[i][j]);
else
printf("%d ", map[i][j]);
}
printf("/n");
}
printf("/n");
continue;
}
else
{
//memset(str1, 0, sizeof(str1));
len = strlen(str);
for(i = 5; i < len;)
{
if(str[i] == 'u')
{
x1 = x0 - 1;
y1 = y0;
if(x1 < 0)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 3;
//printf("MOVED/n");
}
else if(str[i] == 'l')
{
x1 = x0;
y1 = y0 - 1;
if(y1 < 0)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 5;
//printf("MOVED/n");
}
else if(str[i] == 'r')
{
x1 = x0;
y1 = y0 + 1;
if(y1 >= n)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 6;
//printf("MOVED/n");
}
else
{
x1 = x0 + 1;
y1 = y0;
if(x1 >= n)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 5;
//printf("MOVED/n");
}
}
if(i > len)
{
printf("MOVED/n");
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
map[i][j] = map1[i][j];
}
}
}
}
终于AC了,看来我读题的能力还是很欠缺啊!!
The command ”MOVE” is followed by one more more moves:
If move attempts to swap 0 with a non-existent neighbor, then output ”FAILED” on a single line
and stop attempting the remaining moves.
题目没有读懂就做题目是致命的错误啊
(
MOVE right up 比如不能right可以up 那么得到的
还是原来的 up没变(就是failed就break掉了)
)
谢文策大人给我分析了,我才明白的我题目读错了,好纠结
这次的比赛让我受益匪浅!
我读题的能力是完全欠缺的,代码的水平应付一些水题简单的算法题应该没有问题的
可是为何比赛的时候总是那么不理想呢?想想原因吧
*/
#include<iostream>//2460100 2010-05-16 10:57:25 Accepted 2598 0MS 324K 2865 B C++ 悔惜晟
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
//int dir[4][2] = {{-1 ,0}, {0, -1}, {0, 1}, {1 , 0}};
int main()
{
int n, i, j;
char str[2000];
int map[105][105];
int map1[105][105];
int x0, y0;
int x1, y1;
int num;
int len ;
//while(scanf("%d", &n) != EOF)
//while(1)
///while(scanf("%s", str) != EOF)
while(gets(str))
{
// memset(map, 0, sizeof(map));
// scanf("%d", &n);
// getchar();
if(str[0] >= '0' && str[0] <= '9')
{
n = 0;
len = strlen(str);
for(i = 0; i < len; i++)
{
n = 10 * n + str[i] - '0';
}
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{
scanf("%d", &map[i][j]);
if(map[i][j] == 0)
{
x0 = i;
y0 = j;
}
map1[i][j] = map[i][j];
}
getchar();
continue;
}
else if(strcmp(str, "SHOW") == 0)
{
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(j == n - 1)
printf("%d", map[i][j]);
else
printf("%d ", map[i][j]);
}
printf("/n");
}
printf("/n");
continue;
}
else
{
//memset(str1, 0, sizeof(str1));
len = strlen(str);
for(i = 5; i < len;)
{
if(str[i] == 'u')
{
x1 = x0 - 1;
y1 = y0;
if(x1 < 0)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 3;
//printf("MOVED/n");
}
else if(str[i] == 'l')
{
x1 = x0;
y1 = y0 - 1;
if(y1 < 0)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 5;
//printf("MOVED/n");
}
else if(str[i] == 'r')
{
x1 = x0;
y1 = y0 + 1;
if(y1 >= n)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 6;
//printf("MOVED/n");
}
else
{
x1 = x0 + 1;
y1 = y0;
if(x1 >= n)
{
printf("FAILED/n");
break;
}
num = map1[x0][y0];
map1[x0][y0] = map1[x1][y1];
map1[x1][y1] = num;
x0 = x1;
y0 = y1;
i += 5;
//printf("MOVED/n");
}
}
if(i > len)
{
printf("MOVED/n");
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
map[i][j] = map1[i][j];
}
}
}
}
相关文章推荐
- 阿里巴巴Java程序员面试的11个题目,网友:居然一个都不会!
- 阿里巴巴Java程序员面试的11个题目,网友:居然一个都不会!
- 【杭电】2016 数据的交换输出 正确版(之前题目看错了)
- 问题 E : 坤哥的难题 (题目本来觉得很难,但是数据很水,居然简单的for就AC)
- ASP.NET把数据库中的所有题目全部绑定到DataList控件里面并显示题目操作方法
- 题目1387:斐波那契数列
- Android6邪门了,刷机神器TWRP居然在重启动之后消失了,可我没有重装系统啊。
- 真是郁闷,团队中居然出了这样的骗子!!
- Hihicoder 题目1 : Trie树(字典树,经典题)
- 程序员面试金典,牛课网在线编程题目答案(1)
- 经典的售前思维题目,一个很经典的故事
- 题目1 : Trie树
- 201606归纳题目清单
- 一道简单的题目
- 数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)
- acm之动态规划题目3
- 有意思的小学题目(一)——正方形的边长是多少?
- DP---基本思想 具体实现 经典题目 POJ1160 POJ1037
- 一些题目总结
- 常见的链表题目