yoyouhappy的秘密花园
欢迎来到我的秘密花园^^
posts - 16,comments - 33,trackbacks - 0

改了浮点数转整数的错误以后又PE了2次,终于AC了~
题意很明了,就是求逆序数后在排序输出
方法
是将每组数中的measure参与排序,然后依次提取下标,输出对应的字符串就可以了

 1#include<iostream>
 2#include<string>
 3#include<vector>
 4#include<algorithm>
 5using namespace std;
 6int m,n;
 7int deal(string s)
 8{
 9    int i,j,sum=0;
10    for(i=0;i<m;i++)
11        for(j=i+1;j<m;j++)
12        {
13            if(s[i]>s[j])++sum;
14        }
15    return sum;
16}
17
18int main()
19{
20    int ncase,i,j;
21    cin>>ncase;
22    double yoyo;
23    string s;
24    
25    while(ncase)
26    {
27        vector<double>v;
28        vector<string>str;
29        cin>>m;
30        cin>>n;
31        for(i=0;i<n;i++)
32        {
33            cin>>s;
34            str.push_back(s);
35            v.push_back(deal(s)+(double)i/100);   
36        }
37        sort(v.begin(),v.end());
38        for(i=0;i<n;i++)
39        {
40            j=(int)(v[i]*100+0.5)%100;
41            cout<<str[j]<<endl;
42        }
43        --ncase;
44        if(ncase)cout<<endl;    
45    }
46
47
48}


方法
还不会用map用关键字排序,就只好自己用苯方法又作了一遍,写得还是冗余阿

 1#include<iostream>
 2#include<string>
 3#include<vector>
 4#include<algorithm>
 5using namespace std;
 6int m,n;
 7struct Point
 8{
 9    string s;
10    int num;
11};
12int deal(string s)
13{
14    int i,j,sum=0;
15    for(i=0;i<m;i++)
16        for(j=i+1;j<m;j++)
17        {
18            if(s[i]>s[j])++sum;
19        }
20    return sum;
21}
22int main()
23{
24    int ncase,i,j;
25
26    cin>>ncase;
27    string str;
28    Point p;
29    
30    while(ncase)
31    {
32    vector<Point>v;
33    vector<int>s;
34        cin>>m;
35        cin>>n;
36
37        for(i=0;i<n;i++)
38        {
39            cin>>str;
40            p.s=str;
41            p.num=deal(str);
42            v.push_back(p);
43            s.push_back(p.num);
44        }  
45        sort(s.begin(),s.end());
46        vector<Point>::iterator it;
47        
48        for(i=0;i<n;i++)
49            for(it=v.begin();it!=v.end();it++)
50            {
51                if((*it).num==s[i])
52                {
53                    cout<<(*it).s<<endl;
54                    v.erase(it);
55                    break;
56                }
57            }
58        --ncase;
59        if(ncase)
60        cout<<endl;
61        
62    }
63}



 

posted on 2007-08-20 23:05 yoyouhappy 阅读(1102) 评论(5)  编辑 收藏 引用 所属分类: yoyo的解题报告acm/icpc学习笔记

FeedBack:
# re: JOJ 1101 DNA Sorting
2007-08-22 17:50 | llcoolj
牛啊
我那个 RT
闷死
方法都差不多  回复  更多评论
  
# re: JOJ 1101 DNA Sorting
2007-08-23 13:32 | yoyouhappy
@llcoolj
hehe我连续两个题都是RE,而且还是SIGABRT异常退出,也郁闷阿。。。
  回复  更多评论
  
# re: JOJ 1101 DNA Sorting[未登录]
2007-09-08 00:11 | MICHAEL
j=(int)(v[i]*100+0.5)%100;
为什么要加0.5?  回复  更多评论
  
# re: JOJ 1101 DNA Sorting
2007-09-08 14:33 | yoyouhappy
呵呵 这也是我原来错误的原因,是浮点数存储的问题。
在上一篇《诡异阿~》http://www.cppblog.com/yoyouhappy/archive/2007/08/18/30317.html
中可以找到答案  回复  更多评论
  
# re: JOJ 1101 DNA Sorting
2009-08-05 10:52 | lxq
好  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


Priceline Travel
Priceline Travel