当前位置:   article > 正文

Codeforces Round #700 (Div. 2) 虚拟参赛及补题_codeforces 虚拟重现赛使用教程

codeforces 虚拟重现赛使用教程

A题比较简单就不说了。
B题也比较简单,md,但是写法有问题。

  1. struct排序函数
bool cmp(node a,node b)
{
	return a.t<b.t;//点前不同,点后同。
}
  • 1
  • 2
  • 3
  • 4
  1. 而是要理清题意,我就排序关键字错了。

C题

  • 题目链接
  • 题意
    给你n个全排列;你每次问一个位置的数字,然后会返回一个 a i a_{i} ai ;要求你在100次内找到 k k k 使得 a k < m i n ( a k + 1 , a k − 1 ) a_{k}<min(a_{k+1},a_{k-1}) ak<min(ak+1,ak1)
  • 思路

首先判断 a [ 1 ] a[1] a[1] a [ n ] a[n] a[n] 是不是局部最小值,假如是则输出。
否则: a [ 1 ] a[1] a[1] a [ 2 ] a[2] a[2] 呈下降趋势, a [ n ] a[n] a[n] a [ n − 1 ] a[n - 1] a[n1] 呈下降趋势,则 2 2 2 ~ n − 1 n-1 n1中必定存在拐点,即局部最小值。


这时候发现一个性质:
当一个区间 [ l , r ] [l, r] [l,r]左右皆呈向中间下降的趋势的时候,区间一定存在局部最小值。


不难想到在该区间中(不包含端点)任取一点 p o s pos pos,该点要么是局部最小值,否则它一定存在一个相邻点比它小,假设 a [ p o s − 1 ] < a [ p o s ] a[pos - 1] < a[pos] a[pos1]<a[pos],那么 [ l , p o s ] [l, pos] [l,pos] 便可作为一个新的区间,便可缩小区间范围,至于这个 p o s pos pos 怎么取很明显可以二分。


注意特判 n = 1 n = 1 n=1 的情况

  • 代码
#include <bits/stdc++.h>
const int N = 1e5 + 10;
typedef long long ll;



using namespace std;

void solve()
{
    
}

int main()
{
    
    int n;
    cin>>n;
    int l=1,r=n;
    int arr[n+1]={0};
    if(n==1)
    {
        cout<<"! "<<1<<endl;
        return 0;
    }
    cout << "? " << l << endl;
    cout.flush();
    cin >> arr[l];
    cout << "? " << r << endl;
    cout.flush();
    cin >> arr[r];
    while(l<r)
    {
        int mid=l+r>>1;
        if(arr[mid]==0)
        {
            cout<<"? "<<mid<<endl;
            cout.flush();
            cin>>arr[mid];
        }
        if(arr[mid+1]==0)
        {
            cout<<"? "<<mid+1<<endl;
            cout.flush();
            cin>>arr[mid+1];
        }
        if(arr[mid]<arr[mid+1])
            r=mid;
        else
        {
            l=mid+1;
        }
    }
    cout<<"! "<<l<<endl;
    cout.flush();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/55077
推荐阅读
相关标签
  

闽ICP备14008679号