ICPC 2019-2020 North-Western Russia Regional Contest

ICPC 2019-2020 North-Western Russia Regional Contest

A - Accurate Movement

签到

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
int const MAXN = 2e5 + 10;
int n, m, T;

int main() {
   
    int a, b, c;
    cin >> a >> b >> c;
    if (c == b)
        cout << 1;
    else if ((c - b) % (b - a))
        cout << 2 * ((c - b) / (b - a)) + 3;
    else
        cout << 2 * ((c - b) / (b - a)) + 1;
    return 0;
}

B - Bad Treap

题意:

给出笛卡尔树的定义,现在要求给出 n 个点对 ( x , sin( x ) ),使得笛卡尔树的高度尽可能大

题解:

题意就是要找到一个长度为n的递增序列,且sin(ai)也是递增的

考虑到如果sinx极小,那么sin2x sin3x…一直到sinnx都是很小的,所以只需要找到一个最最最接近于0的sin值,然后输出这个点的倍数即可,因为不能超过2^32,所以向左偏1e9

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
struct node {
   
    double sin;
    int x;
} a[N];
bool cmp(node a, node b) {
    return a.sin < b.sin; }
int main() {
   
    int cnt = 0;
    for (int i = 1; i <= 1e5; i++) {
   
        if(sin(i)>0)
        a[cnt].x = i, a[cnt++].sin = sin(i);
    }
    sort(a, a + cnt, cmp);
    int n;
    cin >> n;
    for (int i = 0; i < n;i++){
   
        cout << (LL)a[0].x * i -100000000<< endl;
    } return 0;
}

E - Equidistant

题意: 给出n个点的树,然后上面有m个特殊点,要求求出一个点,使得这个点到所有的m个点的距离都相同

题解: bfs,先将每个特殊点都入队,然后每次到一个数,都看是否有别的点先到达,只有同时到达或者第一次到达才把这个点入队,还要标记一下每个点同时被多少点到达,最后看是否存在一个点同时被m个特殊点到达即可

#include <bits/stdc++.h>

#define int long long
using namespace std;

inline int read() {
   
    int s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
   
        if (ch == '-') w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();
    return s * w;
}

int const MAXN = 3e5 + 10, MAXM = MAXN * 3;
int n, m, T, vis[MAXN], dis[MAXN];
int idx, e[MAXM], h[MAXN], ne[MAXM], num[MAXN], inque[MAXN];
queue<int> q
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值