码迷,mamicode.com
首页 > 其他好文 > 详细

【思维】数学+treap——icpc 2019 nwerc

时间:2020-05-25 19:46:32      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:高度   include   根据   icp   def   fine   第一个   using   end   

要求构造一棵treap,其结点的(key,priority)要求为(x,sinx),且这棵treap的高度是n,所有x都为整数

根据treap的特性,将问题转化为构造一个pair<x,sinx>序列,要求x递增,sinx也递增

当sinx很小时,sinx=x,即接近线性,那么我们找到一个能满足sinx1=x1的整数点x1,(x1,sinx1)作为序列第一个点

再把(2x1,sin2x1)作为序列第二个点...依次类推,就可以构造出这个序列

问题在于x1要多小才能满足这个要求?

  枚举[1..5e4]范围的sinx,把最小的x找到就行,

  5e4*2e4<=1e9,x满足int范围

#include <bits/stdc++.h>
#define P pair<double,int>
using namespace std;

int main(){
    int n;
    cin>>n;
    vector<P> v; vector<int> vv;
    for(int i=1;i<=50000;i++)
        if(sin(i)>0) v.push_back(P(sin(i),i));
    
    sort(v.begin(),v.end());
    for(int i=-25000;i<=25000;i++){
        vv.push_back(i*v[0].second);
    
    sort(vv.begin(),vv.end());
    for(int i=0;i<n;i++) printf("%d\n",vv[i]);
}

 

【思维】数学+treap——icpc 2019 nwerc

标签:高度   include   根据   icp   def   fine   第一个   using   end   

原文地址:https://www.cnblogs.com/zsben991126/p/12958289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!