牛客每日练习----一个背包问题,判断奥运年,沃老师学生的成绩

我喜欢给自己压力,必须得定一个很高的目标,逼自己朝着这个目标前进,不管会不会实现,都是一个动力。                                      ----喻言

链接:https://ac.nowcoder.com/acm/problem/15588
来源:牛客网
 

题目描述

现在有很多物品(它们是可以任意分割的),我们知道它们每个物品的总价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(0<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。

输入描述:

第一行输入两个正整数s,m,(1<=s<=10)以空格分隔,s表示有s个物品。接下来的s行每行有两个用空格分隔的正整数v,w。

输出描述:

输出每组测试数据中背包内的物品的价值和,保留2位小数,每次输出占一行。

示例1

输入

复制

5 5
5 2
5 3
6 2
4 3
10 2

输出

复制

18.50
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define pr pair
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=2000010;
int const mod=1e9+7;
const int maxn=1e5+5;
int s,m;
struct node
{
    int v;
	int w;
    double fy;
}p[15];
bool cmp(struct node a,struct node b)
{
    return a.fy>b.fy;
}
int main()
{
    cin>>s>>m;
    for(int i=0;i>p[i].v>>p[i].w;
        p[i].fy=p[i].v/(p[i].w*1.0);
    }
    sort(p,p+s,cmp);
    double jg=0;
    int i;
    for(i=0;i=p[i].w)
        {
            m-=p[i].w;
            jg+=p[i].v;
        }
        else
            break;
    }
    jg+=p[i].v/(p[i].w*1.0)*m;
    printf("%.2f",jg);
    return 0;
}

链接:https://ac.nowcoder.com/acm/problem/15589
来源:牛客网
 

题目描述

我们IT帮的可爱的帮主大大十分的热爱运动,也十分关心奥运会相关事宜,所以打算让你们写一个程序来判断一个年份故是不是奥运。如果是,那么请顺便告诉他这是第几届

已知第一届奥运会举办于1896年,其后每四年举办一次,但是由于两次世界大战的原因,奥运会在1916、1940、1944年中断过,所以这3个年份我们认为这不算是奥运年。

输入描述:

在一行中输入一个大于0的整数N

输出描述:

如果N是奥运年,则在一行中输出“N年举办的是第i届奥运会”
否则在一行中输出“N年并没有举办奥运会”

示例1

输入

复制

2008

输出

复制

2008年举办的是第29届奥运会

示例2

输入

复制

1940

输出

复制

1940年并没有举办奥运会
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define pr pair
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=2000010;
int const mod=1e9+7;
const int maxn=1e5+5;
int n,p;
int main()
{
    cin>>n;
    if(n==1916||n==1940||n==1944||n<1896)
    	cout<

链接:https://ac.nowcoder.com/acm/problem/15610
来源:牛客网
 

题目描述

第一次期中考终于结束啦!沃老师是个语文老师,他在评学生的作文成绩时,给每位学生的分数都是一个小于10的非负小数。

Amy 8.999999999999999999999999999999999999999990000

Bob 8.9999999999999999999999999999999999999999800

Cat 8.9999999999999999999999999999999999999999899999999

沃老师并不会告诉大家分数的排名,但学生间竞争激烈,大家都想知道自己的作文成绩在班上的排名。

但由于作文分数的小数部分可能超级长,难以用肉眼比较两个数的大小关系,请你帮忙写个程序,把所有学生按照作文分数排序吧〜

输入描述:

输入共有N + 1行。
第一行有一个正整数N,代表班上有几个人。
接下来N行中的第i行,包含一个字符串namei,以及一个小数scorei,分别代表第i个人的名字以及第i个人的作文得分。

输出描述:

输出总共N行,每行由一个名字和一个小数构成,第i行代表着分数第i高的人的名字以及他的作文得分,代表作文得分的小数必须和输入一模一样,也就是原本末尾有多少零,输出也要有相同数量的零。
若分数相同,则名字字典序比较小的放在前面。

示例1

输入

复制

3
Amy 8.999999999999999999999999999999999999999990000
Bob 8.9999999999999999999999999999999999999999800
Cat 8.9999999999999999999999999999999999999999899999999

输出

复制

Amy 8.999999999999999999999999999999999999999990000
Cat 8.9999999999999999999999999999999999999999899999999
Bob 8.9999999999999999999999999999999999999999800

示例2

输入

复制

6
Aa1 3.
Bb2 2.
Cc3 1.
a 5.
A 5.0
9 5.00

输出

复制

9 5.00
A 5.0
a 5.
Aa1 3.
Bb2 2.
Cc3 1.

说明

请仔细观察这样例输入中的最后三行,虽然小数部分末尾0的数目不一样,但他们三个人都是同分的,所以必须按照名字字典序输出。

示例3

输入

复制

10
peter50216 5.0216
kelvin 9.9999999990
seanwu 9.999999999
pp5438 5.438
csferng1021 1.021
tmt514 5.140
dreamoon 0.00000000
shik 9.999999999
l521530 5.21530
coquelicot 9.999999999000000000

输出

复制

coquelicot 9.999999999000000000
kelvin 9.9999999990
seanwu 9.999999999
shik 9.999999999
pp5438 5.438
l521530 5.21530
tmt514 5.140
peter50216 5.0216
csferng1021 1.021
dreamoon 0.00000000

说明

此样例上出现的这些 id 是代表台湾大学参加 2010~2014 年五届 ICPC World Final 的选手唷!当中只有废物 dreamoon 没在 World Final 拿过金牌~

备注:

2≤N≤2×105
1≤字串名称的长度≤11
namei由数字及大小写英文字母组成
若i≠j,则namei≠namej
所有名称的长度总和≤6×105
scorei包含三个部分:整数部分,小数点,小数部分
整数部分一定恰只有一个字元(数字'0'〜'9'之一)
一定有小数点('.')
小数部分由'0'〜'9'组成,长度可为0,也可以由字元'0'结尾

若把scorei视为字符串,所有scorei的长度总和≤6×105

ps:本题于4.27更新数据,如之前的AC代码现在无法通过,请重写

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include//INT_MAX
#define pr pair
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
typedef long long ll;
using namespace std;
int const N=2000010;
int const mod=1e9+7;
const int maxn=1e5+5;
int n;
struct node
{
    string a;
	string b;
	string c;
}p[1024000];
bool cmp(node &x,node &y)
{
    if(x.c==y.c)
        return x.ay.c;
}
int main()
{
    scanf("%d",&n);
    for(int i=0; i>p[i].a>>p[i].b;
        p[i].c=p[i].b;
        int l=p[i].c.length();
        while(p[i].c[l-1]=='0')
        {
            p[i].c.erase(p[i].c.end()-1);
            l--;
        }
    }
    sort(p,p+n,cmp);
    for(int i=0; i

你可能感兴趣的:(牛客网)