c-请问大家这段代码哪里错了,为什么总是Wrong Answer

问题描述

请问大家这段代码哪里错了,为什么总是Wrong Answer

#include <algorithm>
#include <iostream>
using namespace std;
struct node
{
    int cost,weight;
};
int cmp (node a, node b)
{
   return a.weight<b.weight;
}
int main()
{
    int n;
    int kinds,i;
    double ans,temp,money;
    node data[1000];
    scanf("%d",&n);
    while(n--)
    {
        ans=0;
        scanf("%lf%d",&money,&kinds);
        for(i=0;i<kinds;i++)
        scanf("%d%d",&data[i].cost,&data[i].weight);
        sort(data,data+kinds,cmp);
        for(i=0;i<kinds;i++)
        {
            if(money>=data[i].cost*data[i].weight)
            {
                ans+=(double)data[i].weight;
                money-=(double)data[i].cost*data[i].weight;
            }
            else
            {
                temp=(double)money/data[i].cost;
                ans+=temp;
                money-=(double)temp*data[i].cost;
            }
        }
        printf("%.2lf
",ans);
    }
    return 0;
}

如果把排序改成qsort的话,就可以通过,不知道为什么

解决方案

http://www.acmerblog.com/hdu-2187-512-3340.html

解决方案二:

请问这段代码那错了啊?

解决方案三:

http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1&sectionid=3&problemid=14

解决方案四:

提供给你一个思路,sort需要一个返回类型为bool的函数,结果只有两种: a < b,a >= b,你这里虽然是int,其实调用时仍然会转成bool。
而qsort需要一个返回int类型的函数,正负分别表示大小关系,0表示相等。因此两者的效果是不一样的。我不知道你的题目要求,也没看你具体逻辑实现,但是可以肯定的是,了解了这两者的区别,是一定能搞明白这个程序为什么wrong answer的。

时间: 2025-01-04 00:06:34

c-请问大家这段代码哪里错了,为什么总是Wrong Answer的相关文章

c-请问我这段代码哪里错了?

问题描述 请问我这段代码哪里错了? 题目是输入3个学生的4科成绩,输出每个人的平均成绩和所有成绩中的最高和最低值: #include int max(int c[][4]); int min(int b[][4]); void average(int e[][4]); main() { int a[3][4]; int i=0,j; printf("分别输入3个人的4门成绩:n"); for(i=0;i { printf("第%d个人n",i+1); for(j=0

代码提示出错-请问我这段代码哪里出错了,为什么总是异常,我是个新手

问题描述 请问我这段代码哪里出错了,为什么总是异常,我是个新手 package control; import javax.swing.JFrame public class DebugTest { public static void main(String[] args) { int[] ints= new int[20]; try { for (int i=0; i < 20; i ++) { ints[i] = i+1; Ststem.out.println(i+1); } } catc

请问vb.net中timer这段代码哪里错了

问题描述 请问vb.net中timer这段代码哪里错了 代码如下 If n = sn.Length Then Timer1.Enabled = False End If url = fr & sn(n) n = n + 1 MessageBox.Show(url) 我想当timer运行次数等于sn.Length,自动关闭timer,但是运行时,却不能关闭timer,请问是哪里错了,检查了好几遍都没看出来 我觉得这段代码很简单,先是if判断timer是否关闭,然后执行fr和数组的合并,n= n +

c++-请问下面这段代码的意思:C++ 中的冒号操作符

问题描述 请问下面这段代码的意思:C++ 中的冒号操作符 PaketRouter类里有一个成员: // Map from ssrc to sending rtp module. std::list rtp_modules_ GUARDED_BY(crit_.get());请问下面的函数里冒号是什么意思? bool PacketRouter::TimeToSendPacket(uint32_t ssrc uint16_t sequence_number int64_t capture_timest

这段代码哪里错了,一直在报错

问题描述 这段代码哪里错了,一直在报错 Date t = new Date(); long l = t.getTime(); Timestamp time = new Timestamp(l); Connection con = DBUtils.getConnetion(); String sql = ""select * from book_pl group by bookname having pl_date = ? order by avg(book_score) desc&qu

opencv 一段代码出错了

问题描述 opencv 一段代码出错了 显示.exe停止工作,但是去掉那个for循环就可以运行,是ptr<>的使用不当吗#include#include#include #include using namespace std;using namespace cv; int main(){ // 读入一张图片 Mat img = imread(""F:/vsprogram/projecttest/01.jpg""); // 创建一个名为 "&q

ava基础 代码错误-Java新手,求大神帮小弟看看这段代码哪里错了,多谢!!!

问题描述 Java新手,求大神帮小弟看看这段代码哪里错了,多谢!!! class Student { //姓名 private String name; //年龄 private int age; //构造方法 public Student(){ } public Student(String name, int age){ this.name = name; this.age = age; } public String getName(){ return name; } public voi

c++-OpenGL初学,请问我这段代码有错吗?为什么在窗口显示不出来

问题描述 OpenGL初学,请问我这段代码有错吗?为什么在窗口显示不出来 #include #include #include #include #include const GLint screenWidth = 640; const GLint screenHeight = 480; void myInit(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluO

c语言-这段代码哪里错了,为啥不能运行

问题描述 这段代码哪里错了,为啥不能运行 #include int main() { int h=3; float r=1.5,pi=3.14; float perimeter,area1,area2,volume; perimeter=2*pi*r; area1=2*pi*r*h; area2=2*pi*r*r+4*pi*r*h; volume=pi*r*r*h; printf("底面圆周长为:%fn",perimeter); printf("圆柱侧面积为:%fn"