武汉白云黄鹤站∶精华区
发信人: Fastest (Fastest), 信区: Algorithm
标 题: 【汇总】贴一下TopCoder SRM 303 DIV I 500分题的题目和...
发信站: 武汉白云黄鹤站 (2006年06月05日13:30:43 星期一), 站内信件
发信人: Ouer (偶尔)
发信站: 武汉白云黄鹤站 (2006年05月19日03:11:05 星期五)
题目的意思很简单,就是在一个棋盘上面放置了一些Knights,为了让它们之间不互相攻击
要拿掉一些Knights,要求最少要拿掉多少个Knights
这是一道二分图的匹配问题(黑书的第332页有介绍),但是好像有人用贪心给过了
代码如下:
#include <vector>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
class Knights
{
bool path[800][800];
int match[800];
int p[800][2];
bool visit[800];
int cnt, res;
public:
int DFS(int p)
{
int i, t;
for (i = 0; i < cnt; i++)
{
if (path[i][p] && !visit[i])
{
visit[i] = 1;
t = match[i];
match[i] = p;
if (t == -1 || DFS(t))
{
return 1;
}
match[i] = t;
}
}
return 0;
}
int makeFriendly(int N, vector <string> pos)
{
int i, j, dx, dy, add, minu;
cnt = 0;
i = N;
for (i = 0; i < pos.size(); i++)
{
for (j = 0; j < pos[i].length();)
{
p[cnt][0] = pos[i][j] - 'A';
p[cnt][1] = pos[i][j + 1] - '0';
if ((j + 2) < pos[i].length() && pos[i][j + 2] != ' ')
{
p[cnt][1] = p[cnt][1] * 10 + pos[i][j + 2] - '0';
j++;
}
j += 3;
cnt++;
}
}
memset(path, 0, sizeof(path));
for (i = 0; i < cnt; i++)
{
for (j = i + 1; j < cnt; j++)
{
dx = p[i][0] - p[j][0];
dy = p[i][1] - p[j][1];
dx = abs(dx);
dy = abs(dy);
add = dx + dy;
minu = abs(dx - dy);
if (add == 3 && minu == 1)
{
path[i][j] = path[j][i] = 1;
}
}
}
memset(match, -1, sizeof(match));
for (i = 0, res = 0; i < cnt; i++)
{
memset(visit, 0, sizeof(visit));
res += DFS(i);
}
return res / 2;
}
};
──────────────────────────────────────
发信人: Ouer (偶尔)
发信站: 武汉白云黄鹤站 (2006年05月19日03:12:41 星期五)
比赛的时候没有通过,比赛结束之后又写出来的
通过了系统测试
【 在 Ouer (偶尔) 的大作中提到: 】
∶ 题目的意思很简单,就是在一个棋盘上面放置了一些Knights,为了让它们之间不互相攻击
∶ 要拿掉一些Knights,要求最少要拿掉多少个Knights
∶ 这是一道二分图的匹配问题(黑书的第332页有介绍),但是好像有人用贪心给过了
∶ 代码如下:
∶ #include <vector>
∶ #include <string>
∶ #include <cstring>
∶ #include <cmath>
∶ using namespace std;
∶ class Knights
∶ .................(以下省略)
──────────────────────────────────────
发信人: rpmes (Sempr加油!)
发信站: 武汉白云黄鹤站 (2006年05月19日03:45:09 星期五)
hoho
【 在 Ouer (偶尔) 的大作中提到: 】
∶ 题目的意思很简单,就是在一个棋盘上面放置了一些Knights,为了让它们之间不互相攻击
∶ 要拿掉一些Knights,要求最少要拿掉多少个Knights
∶ 这是一道二分图的匹配问题(黑书的第332页有介绍),但是好像有人用贪心给过了
∶ 代码如下:
∶ #include <vector>
∶ #include <string>
∶ #include <cstring>
∶ #include <cmath>
∶ using namespace std;
∶ class Knights
∶ .................(以下省略)
──────────────────────────────────────
发信人: Fastest (Fastest)
发信站: 武汉白云黄鹤站 (2006年05月19日09:40:03 星期五)
受不了你了...
【 在 rpmes (Sempr加油!) 的大作中提到: 】
∶ hoho
∶ 【 在 Ouer (偶尔) 的大作中提到: 】
∶ : 题目的意思很简单,就是在一个棋盘上面放置了一些Knights,为了让它们之间不互相攻击
∶ : 要拿掉一些Knights,要求最少要拿掉多少个Knights
∶ : 这是一道二分图的匹配问题(黑书的第332页有介绍),但是好像有人用贪心给过了
∶ : 代码如下:
∶ : #include <vector>
∶ : #include <string>
∶ : #include <cstring>
∶ : #include <cmath>
∶ .................(以下省略)
──────────────────────────────────────
发信人: Fastest (Fastest)
发信站: 武汉白云黄鹤站 (2006年05月19日09:40:51 星期五)
max_match.....
最优匹配呢?
【 在 Ouer (偶尔) 的大作中提到: 】
∶ 题目的意思很简单,就是在一个棋盘上面放置了一些Knights,为了让它们之间不互相攻击
∶ 要拿掉一些Knights,要求最少要拿掉多少个Knights
∶ 这是一道二分图的匹配问题(黑书的第332页有介绍),但是好像有人用贪心给过了
∶ 代码如下:
∶ #include <vector>
∶ #include <string>
∶ #include <cstring>
∶ #include <cmath>
∶ using namespace std;
∶ class Knights
∶ .................(以下省略)
──────────────────────────────────────
发信人: Ouer (偶尔)
发信站: 武汉白云黄鹤站 (2006年05月19日09:59:25 星期五)
不过感觉中TopCoder的代码应该都在1K以下的...
【 在 Ouer (偶尔) 的大作中提到: 】
∶ 题目的意思很简单,就是在一个棋盘上面放置了一些Knights,为了让它们之间不互相攻击
∶ 要拿掉一些Knights,要求最少要拿掉多少个Knights
∶ 这是一道二分图的匹配问题(黑书的第332页有介绍),但是好像有人用贪心给过了
∶ 代码如下:
∶ #include <vector>
∶ #include <string>
∶ #include <cstring>
∶ #include <cmath>
∶ using namespace std;
∶ class Knights
∶ .................(以下省略)
──────────────────────────────────────
发信人: Fastest (Fastest)
发信站: 武汉白云黄鹤站 (2006年05月19日10:01:35 星期五)
这个有模板,建图了就比较快了.
【 在 Ouer (偶尔) 的大作中提到: 】
∶ 不过感觉中TopCoder的代码应该都在1K以下的...
∶ 【 在 Ouer (偶尔) 的大作中提到: 】
∶ : 题目的意思很简单,就是在一个棋盘上面放置了一些Knights,为了让它们之间不互相攻击
∶ : 要拿掉一些Knights,要求最少要拿掉多少个Knights
∶ : 这是一道二分图的匹配问题(黑书的第332页有介绍),但是好像有人用贪心给过了
∶ : 代码如下:
∶ : #include <vector>
∶ : #include <string>
∶ : #include <cstring>
∶ : #include <cmath>
∶ .................(以下省略)
──────────────────────────────────────
发信人: Ouer (偶尔)
发信站: 武汉白云黄鹤站 (2006年05月19日10:05:17 星期五)
嗯
我是自己敲出来的......
yzf建图的时候建错了,没有处理 A10这种情况,把所有的位置都当成两个字符了,结果程
序被干掉了
我是比赛结束后才过的
【 在 Fastest (Fastest) 的大作中提到: 】
∶ 这个有模板,建图了就比较快了.
∶ 【 在 Ouer (偶尔) 的大作中提到: 】
∶ : 不过感觉中TopCoder的代码应该都在1K以下的...
∶ : .................(以下省略)
──────────────────────────────────────
发信人: Fastest (Fastest)
发信站: 武汉白云黄鹤站 (2006年05月19日10:12:17 星期五)
等暑假我也半夜跟你们玩.....
这个有趣...哈哈
【 在 Ouer (偶尔) 的大作中提到: 】
∶ 嗯
∶ 我是自己敲出来的......
∶ yzf建图的时候建错了,没有处理 A10这种情况,把所有的位置都当成两个字符了,结果程
∶ 序被干掉了
∶ 我是比赛结束后才过的
∶ 【 在 Fastest (Fastest) 的大作中提到: 】
∶ : 这个有模板,建图了就比较快了.
──────────────────────────────────────
华中地区网络中心