计蒜客T1846AC记
查看原题:
初步思路:
- 采用贪心法求解,贪心策略如下:
- 排序,优先买最便宜的。
- 累加总数
ans
初步代码:
(楼主评语:其实其他地方的编程实现不太重要,贪心策略才是问题)
#include <bits/stdc++.h>
using namespace std;
struct d
{
int price,num;
} goods[123456];
bool cmp(d a,d b)
{
return a.price<b.price;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i = 0; i<n; ++i)
{
scanf("%d %d",&goods[i].price,&goods[i].num);
}
sort(goods,goods+n,cmp);
int ans = 0;
for(int i = 0; i<n; ++i)
{
if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m) {
m-=tmp;
ans+=goods[i].num;
} else {
ans+=goods[i].price/m;
}
}
//printf("%d %d\n",goods[i].price,goods[i].num);
}
printf("%d",ans);
return 0;
}
评测结果
| 类型 | 组数 |
|---|---|
| 样例数据 | 1组 |
| AC | 3组 |
| WA | 7组 |
推测原因
推测是在
if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m)
m-=tmp;
ans+=goods[i].num;
} else {
ans+=goods[i].price/m;
}
}
部分出了问题,这一部分正是决定我们“买不买”,“买多少”的部分。
是else中累加的有问题,不应是此种商品的价格/m,另外m还没动呢,答案怎么会对呢?(逃...
于是,我请教了一下,得到的结果:
else 的时候能买的数量是当前的钱数 m 除以每件的 price 减少的钱就是这个数量再乘每件的 price。
改正代码:
#include <bits/stdc++.h>
using namespace std;
struct d
{
int price,num;
} goods[123456];
bool cmp(d a,d b)
{
return a.price<;b.price;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i = 0; i<;n; ++i)
{
scanf("%d %d",&goods[i].price,&goods[i].num);
}
sort(goods,goods+n,cmp);
int ans = 0;
for(int i = 0; i<n; ++i)
{
if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m) {
m-=tmp;
ans+=goods[i].num;
} else {
ans+=m/goods[i].price;
m-=ans*goods[i].price;
}
}
//printf("%d %d\n",goods[i].price,goods[i].num);
}
printf("%d",ans);
return 0;
}
以上是改正代码。
评测结果:
样例都没过哪来的评测结果???
如上,代码没有通过样例
推测原因:
再次去请教,有人告诉我:
m -= m / goods[i].price * goods[i].price ans 是累加的不是这一次买的啊,这一次买的数量是 m / goods[i].price
改正代码:
#include <bits/stdc++.h>
using namespace std;
struct d
{
int price,num;
} goods[123456];
bool cmp(d a,d b)
{
return a.price<b.price;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
for(int i = 0; i<n; ++i)
{
scanf("%d %d",&goods[i].price,&goods[i].num);
}
sort(goods,goods+n,cmp);
int ans = 0;
for(int i = 0; i<n; ++i)
{
if(m) {
int tmp = goods[i].price*goods[i].num;
if(tmp<=m) {
m-=tmp;
ans+=goods[i].num;
} else {
ans+=goods[i].price/m;
}
}
//printf("%d %d\n",goods[i].price,goods[i].num);
}
printf("%d",ans);
return 0;
}
测评结果:
| 类型 | 组数 |
|---|---|
| 样例数据 | 通过 |
| AC | 10组 |
计蒜客T1846AC记的更多相关文章
- 折腾笔记-计蒜客T1167AC记
查看原题 原题地址 思路: 判断回文+判断质数 初步代码: #include <bits/stdc++.h> using namespace std; bool prime(int n) ...
- 折腾笔记-计蒜客t1156AC记
欢迎查看原题地址 此题思路(最初版): 暴力,得出最相近的,1000ms呢,除非数据超大,否则不超时. 说明: 爆搜,搜出结果,时间复杂度基本 $O(n^2)$ 注:本文所有时间(与空间)复杂度仅为估 ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】
Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
- 计蒜客的一道题dfs
这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 等边三角形 dfs
题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...
- 计蒜客 方程的解数 dfs
题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...
随机推荐
- MyBatis(1)-- MyBatis介绍
一.MyBatis优点 不屏蔽SQL,意味着可以更为精确地定位SQL语句,可以对其进行优化和改造,这有利于互联网系统性能的提高,符合互联网需要性能优化的特点. 提供强大.灵活的映射机制,方便Java开 ...
- Spring中@Resource注解报错
描述:Spring框架中,@Resource注解报错,在书写时没有自动提示 解决方法:因为maven配置文件的pom.xml文件中缺少javax.annotation的依赖,在pom.项目路中加入依赖 ...
- 2018.8.14 python中的内置函数(68个)
主要内容: python中68个内置函数的功能及使用方法
- redis入门(三)
目录 redis入门(三) 目录 前言 事务 原理 Lua脚本 安装 脚本命令 集群搭建工具 redis-trib.rb redis官方集群搭建 集群横向扩展 故障转移 redis管理 参考文档 re ...
- xml 需要转义的字符
XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符 ...
- JAVA GUI 事件监听事件 详解 和 案例.
GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line Use ...
- TCP/IP协议第一卷第二章
环回接口: 127全网段均被作为环回地址. 传给广播地址或多播地址的数据报复制一份给环回接口,然后传送到以太网上.这是因为广播传送和多播传送的定义包含自己本身. 任何传给该主机IP地址的数据均送到环回 ...
- 用python实现你的绘画梦想
导语: 你是否还在为当时年少时没有选择自己的梦想而伤心,是否还在为自己的无法成为绘画名家而苦恼,这一切都不需要担心.python都能帮你实现,诶!python怎么能画画呢,一些简单的图案没问题,但 ...
- 关于js中函数的一点总结
1函数中this作用域 this根据当前环境来决定作用域,可以使用call和apply的方法来改变当前的this指向 <script> var name = "global&qu ...
- 利用python实现微信小程序游戏跳一跳详细教程
利用python实现微信小程序游戏跳一跳详细教程 1 先安装python 然后再安装pip <a href="http://newmiracle.cn/wp-content/uploa ...