.Codeforces Round 883 (Div. 3)

简介: Codeforces Round 883 (Div. 3)

#  A. Rudolph and Cut the Rope


只需要按照钉子距离的高度$a_{i}$和绳子的长度$b_{i}$的差值进行排序即可


代码


```

int n;

pii a[N];

bool cmp(pii a,pii b)

{

   return a.x-a.y<b.x-b.y;

}

void solve()

{

   cin>>n;

   for(int i=1;i<=n;i++)

     cin>>a[i].x>>a[i].y;

   sort(a+1,a+1+n,cmp);

   reverse(a+1,a+1+n);

   int res=0;

   for(int i=1;i<=n;i++)

   {

       if(a[i].x<=a[i].y)

       {

           break;

       }

       res++;

   }

   cout<<res<<endl;

}

```


# B. Rudolph and Tic-Tac-Toe


模拟即可


代码


```

void solve()

{

   int n=3;

   for(int i=1;i<=n;i++)

     for(int j=1;j<=n;j++)

        cin>>s[i][j];

   for(int i=1;i<=n;i++)

   {

       for(int j=1;j<=n;j++)

       {

           if(s[i][j]==s[i][j+1]&&s[i][j+1]==s[i][j+2]&&s[i][j]!='.')

           {

               cout<<s[i][j]<<endl;

               return;

           }

           if(s[i][j]==s[i+1][j]&&s[i+1][j]==s[i+2][j]&&s[i][j]!='.')

           {

               cout<<s[i][j]<<endl;

               return;

           }

           if(s[i][j]==s[i+1][j+1]&&s[i+1][j+1]==s[i+2][j+2]&&s[i][j]!='.')

           {

               cout<<s[i][j]<<endl;

               return;

           }

           if(s[i][j]==s[i+1][j-1]&&s[i+1][j-1]==s[i+2][j-2]&&s[i][j]!='.')

           {

               cout<<s[i][j]<<endl;

               return;

           }

       }

   }

   cout<<"DRAW"<<endl;

}

```


# C. Rudolf and the Another Competition


统计出每个人的过题的数量$x_{i}$和罚时$t_{i}$然后依次先对比过题数然后再对比罚时即可


```

void solve()

{

cin>>n>>m>>t;

   vector<pii>p(n+10);

   int res=0;

   for(int i=0;i<n;i++)

   {

    p[i].x=p[i].y=0;

    vector<int>a;

    int s=0;

    for(int j=0;j<m;j++)

    {

     int x;

     cin>>x;

     a.push_back(x);

    }

    sort(a.begin(),a.end());

 

    for(int j=0;j<m;j++)

    {

     s=s+a[j];

        if(s<=t)

        {

         p[i].x+=1;

         p[i].y+=s;

        }

    }

    if(i>0)

    {

     if((p[0].x<p[i].x)||(p[0].x==p[i].x&&p[i].y<p[0].y))res++;

    }

   }

   cout<<res+1<<endl;

 

}

```


# D. Rudolph and Christmas Tree


先统计所有三角形的面积,然后减去重叠部分即可,重叠部分可以根据初中学过的相似三角形定理对应边成比例即可


```

void solve()

{

   cin>>n>>d>>h;

   for(int i=1;i<=n;i++)

     cin>>y[i];

   sort(y+1,y+1+n);

   double s=n*d*h*0.5;

   for(int i=2;i<=n;i++)

   {

       int v=h+y[i-1];

       if(v>y[i])

       {

           double x=v-y[i]*1.0;

           double t=x/h*d*x*0.5;

           s-=t;

       }

   }

   printf("%f\n",s);

}

```



# E2. Rudolf and Snowflakes (hard version)


根据样例中的图解


![img](https://ucc.alicdn.com/images/user-upload-01/img_convert/9bd8aa661c4d3abf3556b11da7519991.png)




节点个数假设为$n$


$n=1+4^1+4^{2}=21$


我们假设他有$k$个子节点,会扩展$x$次那我们可以推出一个方程


$n=1+k+k^{2}+....+k^{x}$


所以只要将$n$分解成多项式即可


我们可以看出这个具有单调性,所以可以利用二分来快速求得答案


先枚举指数$x\in[2,60]$ 然后再二分$k$即可


```

void solve()

{

  cin>>n;

  for(int i=2;i<=60;i++)

  {

     int l=1,r=n+1;

   

     auto check=[&](int x){

      int s=0,t=1;

      for(int j=0;j<=i;j++)

      {

       s+=t;

       if(s>inf)s=inf;

       if((__int128_t)t*x>inf)t=inf;

       else t*=x;

      }

      return s;

     };

   

     while(l+1<r)

     {

      int mid=l+r>>1;

      if(check(mid)>=n)r=mid;

      else l=mid;

     }

     if(check(r)==n)

     {

      cout<<"YES"<<endl;

      return;

     }

  }

  cout<<"NO"<<endl;

 return;

}


int mid=l+r>>1;

      if(check(mid)>=n)r=mid;

      else l=mid;

     }

     if(check(r)==n)

     {

      cout<<"YES"<<endl;

      return;

     }

  }

  cout<<"NO"<<endl;

 return;

}


```

相关文章
|
3月前
Codeforces Round #729 (Div. 2)
【6月更文挑战第4天】在这两个编程问题中,B. Plus and Multiply 要求判断通过加法和乘法操作数组是否能形成目标数 `n`。思路是形如 `x^a + yb = n` 的表达式,如果满足则能构造。C. Strange Function 关注的是找到最小正整数 `x` 使得 `x` 不是 `i` 的因子,计算这些值的和模 `10^9+7`。对于每个 `i`,偶数时 `f(i)` 是 3,奇数时是 2,利用因子与最大公约数计算周期性求和。
24 1
|
11月前
Codeforces Round #186 (Div. 2)A、B、C、D、E
Ilya得到了一个礼物,可以在删掉银行账户最后和倒数第二位的数字(账户有可能是负的),也可以不做任何处理。
31 0
|
11月前
|
人工智能 算法 BI
Codeforces Round #179 (Div. 2)A、B、C、D
我们每次加进来的点相当于k,首先需要进行一个双重循环找到k点和所有点之间的最短路径;然后就以k点位判断节点更新之前的k-1个点,时间复杂度降到O(n^3),而暴力解法每次都要进行floyd,时间复杂度为O(n^4);相比之下前述解法考虑到了floyd算法的性质,更好了运用了算法的内质。
49 0
|
机器学习/深度学习
Codeforces Round #742 (Div. 2)
Codeforces Round #742 (Div. 2)
43 0
|
机器学习/深度学习 人工智能
Codeforces Round 889 (Div. 2)
Codeforces Round 889 (Div. 2)
146 0
|
机器学习/深度学习
Codeforces Round #723 (Div. 2)B. I Hate 1111
Description You are given an integer x. Can you make x by summing up some number of 11,111,1111,11111,…? (You can use any number among them any number of times). For instance, 33=11+11+11 144=111+11+11+11
170 0
Codeforces Round #723 (Div. 2)B. I Hate 1111