2019寒假集训第四场(新生场)

问题 A: 蛇爬树
时间限制: 1 Sec 内存限制: 128 MB
目描述有一条蛇在地上,它想要爬到一棵树的顶端,树的顶端距离地面V米。在白天它能向上爬行A米,而晚上睡觉时,它会滑下B米。那么,这条蛇在第几天能爬到树顶。
输入输入仅一行,三个整数A,B,V(1<=B<A<=1,000,000,000,V≤1,000,000,000),分别表示白天爬行距离,晚上滑下距离,树的高度。

输出输出一个整数,表示几天后可以爬到树顶。
样例输入复制样例数据

2 1 5
样例输出4

#include<stdio.h>
int main()
{
 int a,b,v,t=1,f;
 scanf("%d%d%d",&a,&b,&v);
 f=a;
 while(f<v)
 {
  f+=a-b;
  t++; 
 }
 printf("%d\n",t);
 return 0;
}

问题 B: 组队竞赛
时间限制: 1 Sec 内存限制: 128 MB
目描述每年,A市都会组织程序设计竞赛,他们的比赛与我们的略有不同,是组成小团队进行比赛的,每个队伍有三人组成。根据传统,队员大多数都是男生,因此规定,队伍必须由两个男生和一个女生组成。

可是今年的情况有所不同,由于一个国际交流的活动,该市必须派出K位同学参加国际交流,当然交流没有男女比例的限制。为了顺利的进行国际交流,又要使得参加程序设计竞赛的队伍尽可能的多,就要进行细致的安排。

现在,给定共有M个男同学,N个女同学,需要派遣参加国际交流的为K位同学,请你计算,最多能有多少队伍参加本市的程序设计竞赛。

例如,M=6,N=3,K=2,我们可以派出1位男同学和1位女同学参加国际交流,剩余的5位男同学和2为女同学可以组成2个队伍(剩下的1位男同学就无法参加比赛了)。

输入输入仅一行,包含3个整数M,N,K(0<=M<=100, 0<=N<=100, 0<=K<=M+N),分别表示男生人数,女生人数和参加国际交流的人数。
输出输出一个整数,表示最多可以组织多少个队伍参加比赛。
样例输入复制样例数据

6 3 2
样例输出2

#include<stdio.h>
int main()
{
 int m,n,k,a[5];
 scanf("%d%d%d",&m,&n,&k);
 a[0]=m/2;
 a[1]=n;
 if(a[0]>a[1])
 {
  a[0]=a[1];
  a[1]=(a[0]-a[1])*2+m%2;
 }
 else
 {
     a[1]=a[1]-a[0]+m%2; 
 }
    k-=a[1];
    if(k!=0)
 k=k/3+1;
 if(k>=0) 
 a[0]-=k; 
 printf("%d\n",a[0]);
 return 0;
}
很是尴尬的没通过,思路是先看看最多能排几个队伍参赛,同时记录不能参赛的,然后让交流生与其比较,如果交流生大于的话,就相应拆掉几个队伍(一个队伍三个人)

问题 C: 幸运数字II
描述数字4和7是幸运数字,而其他的都不是幸运数字。一个整数是幸运数字,当且仅当它的十进制表示只包含幸运数字。

现在让你给出第K大的幸运数字。
输入第一行一个整数K(1<=K<=1,000,000,000)
输出第K大的幸运数字。
样例输入复制样例数据

1
样例输出
4

#include <iostream>  
#include <cstdio>  
#include <cstring>  
typedef long long ll;  
using namespace std;  
ll a[1050]={0};  
int main()  
{  
    ll k=0,s=0,l,r,p=1;  
    for(int i=1;i<=1024;i++)  
    {  
        int t=i/2+1,q=i%2?4:7;  
        a[i]=10*a[i-t]+q;  
    }  
    cin>>l>>r;  
    for(int i=0;i<=1024;i++)  
    {  
        if(a[i]>=l)  
        {  
            for(;l<=a[i];l++)  
            {  
                s+=a[i];  
                if(l==r)break;  
            }  
            if(l==r)break;  
        }  
    }  
    cout<<s<<endl;  
    return 0;  
}  

简单的二叉树结构,把幸运数字按顺序存入数组。不过不是本人写的,算法还未学的太多,暂且贴一个别人的题解

问题 D: 分糖果分数
时间限制: 1 Sec 内存限制: 128 MB
题目描述幼儿园的N个小朋友得到了M颗糖果。

每个小朋友都有一个想要得到的糖果数目,如果没有达到他们的预期,就会不高兴。不高兴的程度可以用一个数值表示,就是他们无法满足的糖果数目的平方。例如,一个小朋友想要得到32颗糖果,而他只得到29颗糖果,那么有3颗糖果无法满足,因此不高兴值为9.

不幸的是,现有的糖果无法满足所有的小朋友,因此,需要你给出一个分配方案,使得不高兴值的总和最小。

输入第一行两个整数M和N(1<=M<=2*10^9)(1<=N<=100,000)

接下来N行,每行一个整数,表示每个孩子想要的糖果数。每个小于2*10^9且总和肯定超过M

输出最少生气值总和。输出数据保证结果在int64范围之内。

样例输入复制样例数据

5 3
1
3
2
样例输出1

#include<stdio.h>
#include<math.h>
int main()
{
 int m,n,i,j,t,sum=0,a[100000];
 scanf("%d%d",&m,&n);
 for(i=0;i<n;i++)
 scanf("%d",&a[i]);
 for(i=0;i<n-1;i++)
 for(j=0;j<n-i-1;j++)
 if(a[j]<a[j+1])
 {
  t=a[j];
  a[j]=a[j+1];
  a[j+1]=t;
 }
 for(i=0;i<n,m>0;i++)
 {
  t=m;
  m-=a[i];
 }
 a[i]-=t;
 for(j=i;j<n;j++)
 sum+=a[j]*a[j];
 printf("%d\n",sum);
 return 0;
 
}
求大神填坑
这个题和第五场的C题差不多,可能是从最高开始扫,但是不知道如何扫到最后是所有的平方和最小
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值