计蒜客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 ...
随机推荐
- unityevent与持续按键触发
上一篇中提到一种鼠标按下时的事件触发,即采用eventtrigger设定pointerdown和pointerup并绑定相应事件.但是若要实现持续按键则需要对绑定的每个方法都添加实现持续按键方法.所以 ...
- json基本内容
json的基本信息和历史 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于欧洲计算机协会制定的js规范的一个子集,采用完全独立于编程语言的文本格式来 ...
- swift ARC中的strong、weak、unowned
Swift 用自动引用计数ARC(Automatic Reference Counting)方式来跟踪和管理app的内存使用.这使得内存管理成为swift内部的机制,不需要认为考虑.ARC会自动释放那 ...
- Rust入坑指南:有条不紊
随着我们的坑越来越多,越来越大,我们必须要对各种坑进行管理了.Rust为我们提供了一套坑务管理系统,方便大家有条不紊的寻找.管理.填埋自己的各种坑. Rust提供给我们一些管理代码的特性: Packa ...
- 爬虫基本库的使用---requests库
使用requests---实现Cookies.登录验证.代理设置等操作 处理网页验证和Cookies时,需要写Opener和Handler来处理,为了更方便地实现这些操作,就有了更强大的库reques ...
- 你遇到了吗?Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.fs.FileAlreadyExistsException)
我在使用 Structured Streaming 的 ForeachWriter,写 HDFS 文件时,出现了这个异常 这个异常出现的原因是HDFS作为一个分布式文件系统,支持多线程读,但是不支持多 ...
- Java 用双向循环链表实现 遍历
package day2; /** * 构建双向循环链表,实现遍历功能 */public class DoubleLB { public static void main(String[] args) ...
- 工厂模式(C++)
转载来源:https://www.runoob.com/design-pattern/ 工厂模式 创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑, ...
- hydra的使用
hydra参数详解 -R 继续从上一次进度接着破解 -S 大写,采用SSL链接 -s 小写,可通过这个参数指定非默认端口 -l 指定破解的用户,对特定用户破解 -L 指定用户名字典 -p 小写,指定密 ...
- 还看不懂同事的代码?Lambda 表达式、函数接口了解一下
当前时间:2019年 11月 11日,距离 JDK 14 发布时间(2020年3月17日)还有多少天? // 距离JDK 14 发布还有多少天? LocalDate jdk14 = LocalDate ...