您的位置:首页 > 大数据 > 人工智能

2009 Multi-University Training Contest 5 - Host by NUDT

2016-11-04 15:48 351 查看
Carry之路 三人组 队伍正式成立了。。。。QAQ

2016.11.3 打了第一场比赛

09年的第五场多校合练



当时我们最后过的题



在杭电的 题目列表是: 2853-2862

赛后补了下,1002、1008

1001 当时只有10多个人过的图论

熊神 用km算法跑二分带权匹配,用了一个cf上面学到的巧妙地算法过了。 先给所有权扩大1000倍,给想要走的边 +1 ,让每次都能选则这条边,具体不是很懂。。。 %panda

1002

md,最坑的就是这题, 这题感觉最难点就是题意。。。 一个then 表达了一万个意思,真的理解不了。。。

题意应该是这样的:

如果一个数n ,能够列举出a、b 满足条件1: a*a*b+1,并且a、b不满足条件二:a*a+b,那么这个数n就是NO,否则就是YES

然后我们预处理打个表,然后O(1)判断就好了

(表中a、b扫到1000 就可以了,甚至都不用扫到5000)

1003

斐波那契+组合数。。。 算了,数学看着头疼,交给小学弟搞了

1004

题解都没有,就先不补了

1006、1010 都同理 先不补了

1005

签到题,简单计算几何

1007

算一个dp?

我们在对角线上dp, 对于每一个点,我们都以他为矩阵的左下角,扫能够达到的最大的边长。然后对角线上会有很明显的关系。。而且dp[i-1][j+1]=5 的话,dp[i][j]最大也只可能是5+1了

然后,熊神写的代码显然要比我的简介很多啊,%panda

char mp[1010][1010];
int dp[1010][1010];

int main() {
int n;
while (scanf("%d", &n) != EOF) {
if (n == 0)
break;
for (int i = 1; i <= n; i++) {
scanf("%s", mp[i] + 1);
}
int ans = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == 1 || j == n) {
dp[i][j] = 1;
continue;
}
int row = i;
int col = j;
while (row >= 1 && col <= n && mp[row][j] == mp[i][col]) {
row--;
col++;
}
int x = i - row;
if (dp[i - 1][j + 1] + 1 <= x) {
dp[i][j] = dp[i - 1][j + 1] + 1;
} else
dp[i][j] = x;
ans = max(ans, dp[i][j]);
}
}
printf("%d\n", ans);
}
return 0;
}


1008 赛后发现是一个挺简答得并查集维护。。。。

但当时 不知为什么,没有去看。。。

只有一个坑点,当合并A、B的时候,如果A==B ,那么这个操作使非法的

并查集可以错的地方,我之前貌似都错过了,所以很快就敲完了,但没注意每个样例之后的换行PE了。。。

1009

dp

最坑的地方是: 预处理 ,然后O(1)输出,答案,否则就会TLE ,整个人都被T得不好了。。。

毕竟还是too naive ,这个都记不得了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Carry-road
相关文章推荐