Tyvj2017清北冬令营入学测试

社会实践, 

 

 

 

 

P4744 A’s problem(a)

时间: 1000ms / 空间: 655360KiB / Java类名: Main

背景

冬令营入学测试题,每四天结算一遍成绩。插手享降价

描述

这是一道有背景的问题,小A也是一个有故事的人。但可惜的是此处纸张太小,小A无法把故事详细地说给大家听。可能小A自己也讲不知情自己的故事,因为一旦讲清了,也就没有那道题目了……

小A的题材是那几个样子,它找到了n份差别的做事,第i份工作各种月有ai的工薪,每份工作亟待小A每一日劳作8钟头,七天工作7天。小A想清楚性价比最高(一个月的工钱除以总时长)的工作的数码是稍微。即使有多份,输出编号最小的就足以了。

输入格式

先是行一个数n,表示有n份工作。

         接下来n个数表示ai。

输出格式

出口一个数表示答案。

备注

输入样例

5

3 3 4 5 5

 

输出样例

4

 

多少范围

对于100%的数据n<=100,1<=ai<=1000。

 【水题不多说体系】

#include<iostream>
using namespace std;
int n,a[110];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    int j=1;
    for(int i=2;i<=n;i++)
        if(a[i]>a[j])j=i;
    cout<<j;
    return 0;
}

P4745 B’s problem(b)

时间: 1000ms / 空间: 655360KiB / Java类名: Main

背景

冬令营入学测试

描述

问题叙述

         小B生活在一个很想得到的国家里,这几个国家的钱的面值唯有可能是25,50,100的。小B目前在做社会实践,这一次它选拔在一个食堂里干那件事情。但前几天暴发了一件有趣的事,那件业务是以此样子的,餐厅里大家都在排队买饭,粗心的打饭小姑忘记要带零钱,并且存有排队打饭的人只带了一张钱。

         具体地,第i私有带了一张面额为ai的钱,为了便利起见,我们规定每个人都想买价值25元的饭盒。姨妈显得束手无策。聪明的小B想到了一个主意,让带了25元的先买饭!那样姨妈就有了更加多的零花钱去找开一些面值较大的钱。

         但那样对于部分人来说仍有可能找不开零钱,小B想清楚是不是留存一种排队方案,可以对所有人找开零钱。倘若可行输出“YES”,否则输出“NO”。

输入格式

率先行一个数n,表示有n个想买饭的人。

         接下来一行n个数ai,表示第i个体带着的钱的面额。

 

输出格式

输出“YES”或者“NO”。

 

备注

输入样例

3

25 50 100

 

输出样例

NO

 

数码范围

对于100%的数据n<=100,ai=25或者50或者100。

 思路

把所有的人拿的钱从小到大排个序,别的可以发现

倘若这厮拿的是25元,那么不必要找钱,我的钱包里就多了25元

一旦此人拿的是50元,那么只有一种解决办法,用一张25元的和她换,如若此刻自我从未25元的那么“NO”(因为自身早已把人们从大到小排过序了,所以前边的人不可能有25的钱)

若是此人拿的是100元,有二种艺术

  用一张50和一张25与他换,要求b25>=1,b50>=1

  用三张25与他换,要求b25>=3

不餍足要求则NO

#include<iostream>
#include<algorithm>
using namespace std;
int n,a[110],b25,b50,b100;
bool flag;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
    {
        if(a[i]==25)b25++;
        if(a[i]==50)
        {
            if(b25==0)flag=1;
            else b25--,b50++;
        }
        if(a[i]==100)
        {
            if(b25==0)flag=1;
            else{
                if(b25>=1&&b50>=1){
                    b25--;b50--;
                    continue;
                }
                else if(b25>=3){
                    b25-=3;
                    continue;
                }
                else flag=1;
            }
        }
    }
    if(flag==0)cout<<"YES";
    else cout<<"NO";
    return 0;
}

 

P4747 D’s problem(d)

时间: 1000ms / 空间: 655360KiB / Java类名: Main

背景

冬令营入学测试题

描述

题目叙述

         小D是一名魔法师,它最快乐干的事就是对批判记者了。

         本次记者招待会上,记者对于小D的数学很好奇。于是小D找了个方法把记者批判了一番。

         它对记者抛出了那般一个题材:我有n点能量,写下数字i(1<=i<=9)须求成本a{i}点能量,我用那n点能量最多能写出哪些数来?(当然可以不用光n点能量,具体看样例)

         记者们一脸懵逼,于是来求助于你。

输入格式

一行10个数,表示n,a1,a2,a3,…,a9。

出口格式

一个数表示答案。

备注

输入样例1

10 2 2 1 2 2 2 2 2 2

 

出口样例1

3333333333

 

输入样例2

10 4 11 11 11 11 11 11 11 10

 

出口样例2

11    

 

数量范围

对于30%的数据n,ai<=10。

对于60%的数据n,ai<=100。

对于100% 的数据1<=n,ai<=1000000,n>=min{ai}。

思路

输出的数最大,首先要力保输出的位数最大,其次要尽量使高位上的数值最大

找到数列中的最小值,即可找到出口的最大位数=总能量/最小值

想必在出口一串最小值代表的职分后意识还有能量剩余,那么这么些能量不用白不用,不过大家输出的数字已经是用能量最小的数字了,没有更小的供自家独自使用剩余能量了,于是自己只得试图去最初规定的数列中改变一些数,当然,为了不越改越小,大家要从9倒着循环,到细微值就停止。

至于得以完结,我们只要求一回四回的增多余数,然后在盘算中拿走新的余数,我在代码中说的相比清楚

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,t;
int a[2000000];
int min1=99999999;
int flag=1;
int main()
{
    cin>>n;
    for(int i=1;i<=9;i++)cin>>a[i];
    for(int i=9;i>=1;i--)
    {
        if(a[i]<min1)
        {
            min1=a[i];//找到最小数的大小min1和序号t 
            t=i;
        }
    } 
    int s=n/a[t];//最多可以输出s个t 
    int q=n%a[t];//输出s个t后,还剩q个能量 
    int p=0;
    for(int j=1;j<=s;j++)
    {    
        q+=min1;//剩下的能量加上输出这个位置上的t所需要的能量,可能得到更优的解,933总比333优吧,那就把输出333剩下的能量分配出一点来供给输出9,还得保证输出数字的位数不变 
        for(int i=9;i>=t;i--)//从9到t中寻找更划算 
            if(a[i]<=q)
            {
                q=q-a[i];//我又计算出一个新的剩余能量 
                cout<<i;
                p++;//p代表了被我修改(用剩余能量补偿至>t)的数的个数 
            }
    }
    for(int i=1;i<=s-p;i++)cout<<t;//把未经修改的位置上填满t 
    return 0;
}

 

P4749 F’s problem(f)

时间: 1000ms / 空间: 655360KiB / Java类名: Main

背景

冬令营入学测试

描述

其一故事是关于小F的,它有一个如何的故事吧。

         小F是一个田径爱好者,那天它们都会御史在设置马拉松比赛,这么些城池能够被看作是n个点m条带权有向边组成的图。马拉松比赛的终点只有一个:点S。

         有k个人与会了这一场马拉松,小F所在的城市的马拉松与正常的马拉松不等同,每个人的源点都是分裂等的,具体地,第i个体从第{ai}个城市出发,并且第i个人的进度是{vi}。每个人本来是会顺着最短路跑到S点,若是一个人跑步的距离是s,速度是v,那么他所开支的大运为s/v。

         现在小F想知道,什么人是最快到达极限的。若有七个同时到达终点的,就求跑的路最长的,即使有七个同时到达极限且跑的路最长的,就求编号最大的。

         小F想清楚很是人的数码是有点。

 

输入格式

第一行3个数字,n,k,m,表示点的个数,跑步的总人口,以及路径的条数。

         接下来一行m行,每行3个数ai,bi,ci表示有一条从ai到bi长为ci的有向路径。

         接下来一行一个数S。

         接下来一行k个数,表示每个人的源点xi。

         接下来一行k个数,表示每个人的快慢vi。

出口格式

输出一个数表示答案。

 

测试样例1

输入

5 2 10 
5 1 9 
1 2 81 
2 3 30 
2 1 46 
1 4 45 
2 4 48 
5 1 93 
2 5 61 
2 5 21 
3 5 45 

3 5 
18 29

输出

2

备注

输入样例

3 2 3

1 2 2

1 3 3

2 3 1

3

2 1

1 3

 

出口样例

2

 

数量范围

对于30%的数据n<=5,m<=10。

对于100%的数据n<=300,m<=5000。0<=ci<=100,1<=xi,S<=n,1<=vi<=100,1<=k<=n。

 思路

多少范围好xiao,本少大放心头之快,写了一篇弗洛伊德

弗洛伊德求出最短路。then balabala……(都在代码中了)

#include<iostream>
using namespace std;
int a[301][301];
int n,k,m,s;
int x,y,z;
int xi[301],vi[301];
double minx=999999;
int jl,jlk;
int main()
{
    cin>>n>>k>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(a[i][j]==0&&i!=j) a[i][j]=999999;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>z;
        a[x][y]=z;
    }
    for(int kk=1;kk<=n;kk++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                if(i!=j&&i!=kk&&j!=kk)
                {
                    a[i][j]=min(a[i][j],a[i][kk]+a[kk][j]);
                }
            }
    cin>>s;
    for(int i=1;i<=k;i++)
        cin>>xi[i];
    for(int i=1;i<=k;i++)
        cin>>vi[i];
    for(int i=1;i<=k;i++)
    {
        if(a[xi[i]][s]*1.0/vi[i]<=minx)
        {
            if(a[xi[i]][s]*1.0/vi[i]==minx)
            {
                if(a[xi[i]][s]>=a[jlk][s])
                {
                    minx=a[xi[i]][s]*1.0/vi[i];
                    jl=i;
                    jlk=xi[i];
                }
            }
            else{
                minx=a[xi[i]][s]*1.0/vi[i];
                jl=i;
                jlk=xi[i];
            }
        }
    }
    cout<<jl;
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注