Codeforces Round #170 (Div. 2)

本文介绍了一个关于构造特定凸包问题的算法解决思路,通过数学方法确保了所构造的点集形成的凸包最多包含m条边,并详细描述了实现过程。针对特殊情况进行了讨论并提供了完整的代码实现。

A. B. 

暴力

C.

人和语言都看做点,建图后,求出图有k个联通块,答案就是k-1, 注意每个人都不会任何语言的情况,答案为n。

D.

 先排除不成立的情况 m == 3 && n > 5

.抛物线的对称的一边上任取m个点必定构成凸m边形。我们可以先构造出这凸m边行, 然后再加入n-m个点,这些点的加入要不能改变凸包最多的边数m,

我们可以让这n-m个点与m个点的连接的直线倾斜角接近90度,横坐标差值小,纵坐标差值大即可。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int h = 10000000;
int main() {
    ios :: sync_with_stdio(0);
    int i, j, n, m;
    cin >> n >> m;
    if(n >= 5 && m == 3) puts("-1");
    else {
        for(i = 1; i <= m; i++) printf("%d %d\n", i, h+i*i);
        for(i = 1; i <= n-m; i++) printf("%d %d\n", i, -h-i*i);
    }
    return 0;
}

E.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值