首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

_ACM题_本机运行没错_提交一直WA

2012-04-10 
求助_ACM题_本机运行没错_提交一直WA各位大侠,帮忙看一下哪出错了题目是:题目描述:一个复数(x+iy)集合,两

求助_ACM题_本机运行没错_提交一直WA
各位大侠,帮忙看一下哪出错了
题目是:
题目描述:

  一个复数(x+iy)集合,两种操作作用在该集合上:

  1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;

  2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;

  最开始要读入一个int n,表示接下来的n行每一行都是一条命令。

输入:

  输入有多组数据。
  每组输入一个n(1<=n<=1000),然后再输入n条指令。

输出:

  根据指令输出结果。

样例输入:

  3
  Pop
  Insert 1+i2
  Pop

样例输出:

  empty
  SIZE = 1
  1+i2
  SIZE = 0

提示:

  模相等的输出b较小的复数。

  a和b都是非负数。



我的代码是:

C/C++ code
#include <iostream>#include <algorithm>#include <string>#include <vector>#include <cstdio>using namespace std;struct info{    int x;    int y;};bool cmp(const info &a,const info &b){    if((a.x)*(a.x)+(a.y)*(a.y)==(b.x)*(b.x)+(b.y)*(b.y)) return a.y>b.y;    else return (a.x)*(a.x)+(a.y)*(a.y)<(b.x)*(b.x)+(b.y)*(b.y);};int main(){    string s,t;    char q[1000];    int n;    vector<info> v;    info in;    while(cin>>n)    {        getchar();        while(n--)        {            gets(q);            t=q;            if(t[0]=='I')            {                in.x=t[7]-'0';                in.y=t[10]-'0';                v.push_back(in);                sort(v.begin(),v.end(),cmp);                cout<<"SIZE = "<<v.size()<<endl;            }            else            {                if(v.size()==0) cout<<"empty"<<endl;                else                {                    vector<info>::iterator it=v.end();                    it--;                     cout<<(*it).x<<"+i"<<(*it).y<<endl;                     v.erase(it);                     cout<<"SIZE = "<<v.size()<<endl;                }            }        }        v.clear();    }}


题目链接:http://ac.jobdu.com/problem.php?id=1178

九度OJ,题号1178

[解决办法]
本机运行没错但提交错误,一般就是没考虑特殊情况,ACM题都这样
[解决办法]
本机运行没错,你只过了题目上的几个样例吧,你多找几个样例试试
[解决办法]
楼主你忽略了一个问题, a 与 b 不会只是 一位数吧。
[解决办法]
楼主可以这样
C/C++ code
scanf("%s", str);if (str[0] = 'I'){scanf("%d+i%d",&in.x,&in.y);}else{} 

热点排行