HIT2020暑期集训 Day1-Day2

Day1

B题

G题  CodeForces 91B

JAVA   BigDecimal函数的使用    八进制小数转十进制小数(白学Java课了,搞半天搞不出来)

import java.util.*;
import java.io.*;
import java.math.BigDecimal;
public class Main 
{
    public static void main(String[] args) throws IOException
    {
        Scanner cin=new Scanner(new BufferedInputStream(System.in));
        BigDecimal x=new BigDecimal(1);
        BigDecimal y=new BigDecimal(8);
        String n=null;
        while(cin.hasNext())
        {
            BigDecimal ans=new BigDecimal(0);
            BigDecimal bit=x.divide(y);
            n=cin.next();
            for(int i=2;i<n.length();++i)
            {
                ans=ans.add(bit.multiply(new BigDecimal(n.charAt(i)-'0')));
                bit=bit.divide(y);
            }
            System.out.println(n+" [8] = "+ans.toString()+" [10]");
         }
    }
}

Day2

B题

C题

F题

G题   CodeForces 91B

大概就是,给一个长度为N的序列,求其中每个元素与位于它右边、比它小、且位置最右边的元素的距离。

具体做法是,从右至左,维护一个单调递减的栈(即当元素比栈顶元素小时将其入栈),每当当前元素比栈顶元素大的时候,在栈中找到比当前元素小且最大的元素(这个过程可以用lower_bound函数或者二分查找),就可以求出答案了。

lower_bound    (没想到lower_bound还可以这么用。。涨知识了)

#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 100005
int a[maxn],ans[maxn],stk[maxn],num[maxn],top;
bool cmp(int x,int y){return x>y;}
int main()
{
    int i,n,it,ma=0;
    scanf("%d",&n);
    for (i=1;i<=n;i++) 
    {
        scanf("%d",&a[i]);
        if (a[i]>ma) ma=a[i];
    }
    stk[0]=ma+1;
    for (i=n;i>=1;i--)
    {
        if (stk[top]>a[i]) 
        {
            stk[++top]=a[i];
            num[top]=i;ans[i]=-1;
        }
        else if (stk[top]==a[i]) ans[i]=-1;
        else if (stk[top]<a[i])
        {
            it=lower_bound(stk+1,stk+top+1,a[i],cmp)-stk;
            if (a[i]==stk[it]) it++;
            ans[i]=num[it]-i-1;
        }
    }
    for (i=1;i<=n;i++) printf("%d ",ans[i]);
    return 0;
}

二分版本(部分)

else if (stk[top]<a[i])
{
     l=1;r=top;
     while (l<=r)
     {
          mid=(l+r)>>1;
          if (stk[mid]>=a[i]) l=mid+1;
          else r=mid-1; 
     }
     ans[i]=num[l]-i-1;
}

猜你喜欢

转载自www.cnblogs.com/lsykk/p/13405931.html