我是靠谱客的博主 时尚酸奶,最近开发中收集的这篇文章主要介绍牛客寒假算法基础集训营2 A:处女座的签到题(排序)+C:处女座的砝码(思维)+J:处女座的期末复习(贪心),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【题A】

处女座的签到题

【题解】

由于题目条件,x,y坐标的绝对值均在1e9以下,面积可能会到达1e18,所以无法用double储存。三角形的面积等于相邻两边叉积的一半,所以三角形面积的两倍一定是整数,我们可以用long long来储存,最后特判输出”.00”或”.50”。
对于找第k大,时间复杂度为O(n),可以利用nth_element。

nth_element()函数(取容器中的第n大值)

头文件:#include<algorithm>

作用:nth_element作用为求第n大的元素,并把它放在第n位置上,下标是从0开始计数的,也就是说求第0小的元素就是最小的数。

注意:nth_element()函数不过将第n大的数排好了位置,并不返回值。

【代码】

#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct p{
    ll x,y;
}f[85];
int main()
{
    int t; scanf("%d",&t);
    while(t--)
    {
        int n,k; scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++) scanf("%lld%lld",&f[i].x,&f[i].y);
        vector <ll> v;
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++)
                for(int k=j+1;k<=n;k++)
                {
                    ll area=abs((f[j].x-f[i].x)*(f[k].y-f[i].y)-(f[k].x-f[i].x)*(f[j].y-f[i].y));
                    v.push_back(area);
                }
        nth_element(v.begin(),v.begin()+v.size()-k,v.end());
        ll ans=v[v.size()-k];
        if (ans%2==0) printf("%lld.00n",ans/2);
        else printf("%lld.50n",ans/2);
    }
    return 0;
}

【题C】

处女座的砝码

【题解】

对于每个砝码,可以选择放左边、不放、放右边三种情况,所以可以按三进制进行排列即可。

选择砝码如下:1,3,9,27,…选m个数最多能称出的重量为:$displaystylesum_{i=0}^{m-1} 3^i$          注意高精度。

【代码】

import java.math.BigDecimal; 
import java.util.Scanner; 
import java.math.BigInteger;
  
public class Main {
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);
        BigInteger a;
        BigInteger b = new BigInteger("1");
        BigInteger c=new BigInteger("3");
        BigInteger ad=new BigInteger("1");
        a = scan.nextBigInteger();
        int cnt=1;
        while(a.compareTo(b)>0)
        {
            cnt++;
            b=b.multiply(c);
            b=b.add(ad);
        }
        System.out.println(cnt);
        return;
    }
}

【题J】

处女座的期末复习

【题解】

优先复习先考的科目,如果复习完超过考试时间就复习不完输出NO,否则加上考试的两小时。简单贪心。

【代码】

typedef long long int ll;
const int maxn=1e5+5;
struct p{
    ll a,b;
}f[maxn];
bool cmp(p x,p y)
{
    return x.b<y.b;
}
int main()
{
    int n,i; scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%lld",&f[i].a);
    for(i=1;i<=n;i++) scanf("%lld",&f[i].b);
    sort(f+1,f+n+1,cmp);
    int s=1; ll sum=0;
    for(int i=1;i<=n;i++)
    {
        sum+=f[i].a;
        if(sum<=f[i].b) sum+=2;
        else
        {
            s=0;break;
        }
    }
    if(s) puts("YES");
    else puts("NO");
    return 0;
}

 

最后

以上就是时尚酸奶为你收集整理的牛客寒假算法基础集训营2 A:处女座的签到题(排序)+C:处女座的砝码(思维)+J:处女座的期末复习(贪心)的全部内容,希望文章能够帮你解决牛客寒假算法基础集训营2 A:处女座的签到题(排序)+C:处女座的砝码(思维)+J:处女座的期末复习(贪心)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部