北京信息科技大学第十一届程序设计竞赛(重现赛)H

H andy和购物

题目链接:https://ac.nowcoder.com/acm/contest/940/H

题目描述

andy要去市场买n件货物,每件货物的价格为ai。商家为了吸引顾客,给每个买N件货物的顾客一个折扣清单,清单上有N个小于1的小数bj表示折扣。对于每个折扣bj,由用户自行决定用它使哪个货物的价格变成bj * ai,并且只能用一次。

andy想让你帮他算一下他最少的花费。

输入描述:

先输入一个正整数t,代表样例的组数。(1≤t≤10)

对于每个样例:

第一行,输入一个正整数n(1≤n≤1000)。

第二行包含n个整数,第i个整数a[i]代表第i个商品的原价。(1≤a[i]≤1e9)

第三行包含n个小数b[i],含义如题目描述。(0≤b[i]≤1)

输出描述:

对于每个样例,输出一个实数s,保留3位小数,表示最小的花费。

示例1

输入

1
5
1 2 3 4 5
0.1 0.2 0.3 0.4 0.5

输出

3.500

思路:

原价大的与折扣大的相乘,将其排序后相乘累加即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1005;
struct node{
    int a;
    double zhe;
}Node[1005];
int main()
{

    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int x[maxn];
        double y[maxn];
        for(int i=0;i<n;i++)
            cin>>x[i];
        sort(x,x+n);
        for(int i=0;i<n;i++)
            Node[i].a=x[i];
        for(int i=0;i<n;i++)
            cin>>y[i];
        sort(y,y+n,greater<double>());
        for(int i=0;i<n;i++)
            Node[i].zhe=y[i];
        double sum=0.0;
        for(int i=0;i<n;i++)
           sum+=Node[i].a*Node[i].zhe;
        printf("%.3f\n",sum);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/Vampire6/p/11131713.html

时间: 2024-10-17 12:08:35

北京信息科技大学第十一届程序设计竞赛(重现赛)H的相关文章

第八届福建省大学生程序设计竞赛-重现赛

第八届福建省大学生程序设计竞赛-重现赛 B   计算几何 题意:问两个三角形是相交.包含还是相离. tags:套板子..求出相交的面积,再判断一下 /* 多边形相交面积模板 */ #define maxn 510 const double eps=1E-8; int sig(double d){ return(d>eps)-(d<-eps); } struct Point{ double x,y; Point(){} Point(double x,double y):x(x),y(y){} b

2016CCPC东北地区大学生程序设计竞赛 - 重现赛 1008(hdu 5929)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5929 Problem Description Mr. Frog learned a basic data structure recently, which is called stack.There are some basic operations of stack: ? PUSH x: put x on the top of the stack, x must be 0 or 1.? POP

2016CCPC东北地区大学生程序设计竞赛 - 重现赛 1003

链接http://acm.hdu.edu.cn/showproblem.php?pid=5924 题意:根据公式求C,D 解法:打表找规律 #include <bits/stdc++.h> using namespace std; #define ll long long int main() { int t,cnt=1; scanf("%d",&t); while(t--) { ll a,b; scanf("%I64d%I64d",&a

2016CCPC东北地区大学生程序设计竞赛 - 重现赛 1005

链接http://acm.hdu.edu.cn/showproblem.php?pid=5926 题意:给我们一个矩阵,问你根据连连看的玩法可以消去其中的元素 解法:连连看怎么玩,就怎么写,别忘记边界 #include<stdio.h> //#include<bits/stdc++.h> #include<string.h> #include<iostream> #include<math.h> #include<sstream> #

2016CCPC东北地区大学生程序设计竞赛 - 重现赛 1001

链接http://acm.hdu.edu.cn/showproblem.php?pid=5922 题意:最小生成树,但边的权值是连接两点的最小公倍数 解法:不要真的写最小生成树啦,只要其他点和第一点相连,边的权值就是最小的,相加就好了 #include <bits/stdc++.h> using namespace std; #define ll long long int main() { int t,cnt=1; scanf("%d",&t); while(t-

2016CCPC东北地区大学生程序设计竞赛 - 重现赛 1008

链接http://acm.hdu.edu.cn/showproblem.php?pid=5929 题意:给你一种数据结构以及操作,和一种位运算,最后询问:从‘栈’顶到低的运算顺序结果是多少 解法:根据位运算,发现出现0,结果就是1,那么就记录两端0的位置就好,中间不管出现什么,结果大部分都是1,考虑还有反转操作,使用双端队列,用flag标记反转后的情况,然后根据需要添加元素记录位置,最后根据标记,出现元素等进行讨论计算 #include <iostream> #include <dequ

RunningMan【第六届福建省大学生程序设计竞赛-重现赛】

RunningMan Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original ID: 2221 64-bit integer IO format: %I64d      Java class name: Main Prev Submit Status Statistics Discuss Next ZB loves watching RunningMan! There's a ga

2013年北京师范大学新生程序设计竞赛网络赛--D. Number theory(模拟取余)

D. Number theory Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main Submit Status PID: 34055 Font Size:  +   - 数学不仅是简单而且是美的.数学很有趣,但是数学中也有很多难题,比如哥德巴赫猜想.各种欧拉定理.拉格朗日中值定理.费马定理等.今天小若遇

2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛-B-precise math function

题目描述 喜爱ACM的PBY同学遇到了一道数学难题,已知底数n,请你帮他准确的计算出结果a = nπ(n的π次方),结果保留小数点后x位. 输入描述: 第一行是一个整数t,表示测试实例的个数: 然后是t行输入数据,每行包含两个正整数n和x,表示底数和保留位数. (1 <= t <= 100,1 <= n <= 500,1 <= x <= 6) 输出描述: 对于每组输入数据,分别输出结果a,每个输出占一行. 示例1 输入 3 1 3 7 6 9 1 输出 1.000 45