UVALive 7503 Change(乱搞)题解

题意:你现在有面额为A的纸币,现在需要面额为B的钱(可以是一张也可以是好多张拼成一张),有一台自动售货机,里面有任意价格的商品,售货机兑换出的零钱是随机的(比如找你0.03可能给你0.01+0.01+0.01也可能是0.01+0.02),那么问至少要花多少钱你肯定能兑换到所需要的面额。A, B ∈ {0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50, 100} and A > B

思路:题意读错了...这里的意思不是你只能买一个东西,而是你买了之后可以用找零的钱继续买,那么如果0.01可以解决那么就是0.01,其他的只要用零钱继续0.01就可以了。

代码:

#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = 1000 + 10;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
int main(){
    int t, ca = 1;
    scanf("%d", &t);
    while(t--){
        double a, b;
        scanf("%lf%lf", &a, &b);
        printf("Case #%d: ", ca++);
        if(b == 0.01){  //0.03
            if(a == 0.02){
                printf("0.01\n");
            }
            else if(a == 0.05){
                printf("0.02\n");
            }
            else{
                printf("0.02\n");
            }
        }
        else if(b == 0.02){ //0.04 0.09
            if(a == 0.05){
                printf("0.01\n");
            }
            else{
                printf("0.01\n");
            }
        }
        else if(b == 0.05){ //0.09
            printf("0.01\n");
        }
        else if(b == 0.1){  //0.39
            if(a == 0.2) printf("0.01\n");
            else if(a == 0.5) printf("0.02\n");
            else printf("0.02\n");
        }
        else if(b == 0.2){  //0.49 0.99
            if(a == 0.5) printf("0.01\n");
            else printf("0.01\n");
        }
        else if(b == 0.5){  //0.99
            printf("0.01\n");
        }
        else if(b == 1){    //3.99
            if(a == 2) printf("0.01\n");
            else if(a == 5) printf("0.02\n");
            else printf("0.02\n");
        }
        else if(b == 2){    //4.99 9.99
            if(a == 5) printf("0.01\n");
            else printf("0.01\n");
        }
        else if(b == 5){    //9.99
            printf("0.01\n");
        }
        else if(b == 10){   //39.99
            if(a == 20) printf("0.01\n");
            else printf("0.02\n");
        }
        else if(b == 20){   //49.99 99.99
            if(a == 50) printf("0.01\n");
            else printf("0.01\n");
        }
        else{   //99.99
            printf("0.01\n");
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/KirinSB/p/10328002.html

时间: 2024-11-01 20:36:04

UVALive 7503 Change(乱搞)题解的相关文章

【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞

3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 159[Submit][Status][Discuss] Description GTY召唤了n个人来做实验,GTY家的房子很大,有m个房间一开始所有人都在1号房间里,GTY会命令某人去某个房间等待做实验,或者命令一段区间的房间开始实验,实验会获得一些实验信息点数,点数为房间里的人数,如果一个房间里的一群人已经做过实验了那么这些人将不会增

【乱搞】【HNOI 2008】【bzoj 1011】遥远的行星

1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 2640 Solved: 954 Description 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用.请计算每颗行星的受力,只要结果的相对误差不超过5%即可.

[bzoj1356]Rectangle[Baltic2009][几何常识乱搞]

虽然说是几何常识乱搞,但是想不到啊.. 题意:n个点取4个组成矩形,使面积最大,求面积. n<=1500 题解: 1.对角线相等且相互交于中点的四边形是矩形. 2.矩形四点共圆. 所以$n^2$枚举边,把线段中点和长度打包pair 如果两条线的pair相等则可以构成一个圆,把相等的线段平方级枚举即可. 考虑一个圆上的整点不多,常数小,所以没有T..注意精度问题. [学习]http://blog.csdn.net/wzq_qwq/article/details/49005387 感觉自己代码自带大

【bzoj4917】Hash Killer IV 乱搞

题目描述 已知函数: unsigned int Hash(unsigned int v) { unsigned int t = v; t = t + (t << 10); t = t ^ (t >> 6); t = t + (t << 3); t = t ^ (t >> 11); t = t + (t << 16); return t; } 的返回值为t,求传入的参数v. 输入 第一行包含一个正整数Q(1<=Q<=100000),表示

Ural 1780 Gray Code 乱搞暴力

原题链接:http://acm.timus.ru/problem.aspx?space=1&num=1780 1780. Gray Code Time limit: 0.5 secondMemory limit: 64 MB Denis, Vanya and Fedya gathered at their first team training. Fedya told them that he knew the algorithm for constructing aGray code. Cre

【bzoj5108】[CodePlus2017]可做题 拆位+乱搞

题目描述 给出一个长度为 $m$ 的序列 $a$ ,编号为 $a_1\sim a_m$,其中 $n$ 个位置的数已经确定,剩下的位置的数可以任意指定.现在令 $b$ 表示 $a$ 的前缀异或和,求 $\sum\limits_{i=1}^mb_i$ 的最小值. 输入 输入第一行两个非负整数n,m,分别表示原始序列a的长度及剩余元素的个数. 之后m行,每行2个数i,ai,表示一个剩余元素的位置和数值. 1<=N<=10^9,0<=M<=Min(n,10^5),0<=ai<=

[USACO08OCT]牧场散步Pasture Walking (LCA) (乱搞)

题面传送门我太懒了所以吃掉题面 题解 可以发现如果两点不在一条链上的话,那么他们的最短路径一定会经过LCA. 所以可以维护一下每个点到树根的距离,然后大力前缀和乱搞就好了. #include <bits/stdc++.h> const int max_n=1e4+5; int N,M,cnt; int depth[max_n],father[15][max_n],lg2[max_n],first_edge[max_n],dis[max_n]; struct edge { int to,w,ne

【51nod1443】路径和树(堆优化dijkstra乱搞)

点此看题面 大致题意:给你一个无向联通图,要求你求出这张图中从u开始的权值和最小的最短路径树的权值之和. 什么是最短路径树? 从\(u\)开始到任意点的最短路径与在原图中相比不变. 题解 既然要求最短路径,那么最容易想到的就是\(dijkstra\)和\(SPFA\)(毕竟Floyd的时间复杂度难以承受),又由于黄学长说能用\(dijkstra\)时尽量用\(dijkstra\),所以,我就打了一个堆优化的\(dijkstra\)开始乱搞. 其实,这道题目的思路真的挺简单的,只要朴素地做一遍\(

Codeforces 1186F - Vus the Cossack and a Graph 模拟乱搞/欧拉回路

题意:给你一张无向图,要求对这张图进行删边操作,要求删边之后的图的总边数 >= ceil((n + m) / 2), 每个点的度数 >= ceil(deg[i] / 2).(deg[i]是原图中i的度数) 思路1:模拟 + 乱搞 直接暴力删就行了,读入边之后随机打乱一下就很难被hack了. 代码: #include <bits/stdc++.h> #define LL long long #define INF 0x3f3f3f3f #define db double #defin