BestResult

任腾 发表于 2008-05-05 22:41:14

#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <sstream>
using namespace std;

struct BestResult{
    vector<int> findBestResult(vector<string> team){
        int a[15][3]={0};
        int n=team.size();
        for (int i=0;i<n;i++){
            istringstream strin(team[i]);
            for (int j=0;j<3;j++) strin>>a[i][j];
        }

        for (int i=1;i<n;i++){
            for (int j=0;j<3;j++)
                a[i][j]=a[0][j]-a[i][j];
        }

        int ansx,ansy,ansz,ans=-1;
        for (int x=1;x<=1000;x++){
            for (int y=1;y<=x;y++){
                int seg[15][2]={0};
                for (int i=1;i<n;i++){
                    if (a[i][2]==0){
                        if (-a[i][0]*x-a[i][1]*y<=0){
                            seg[i][0]=1;
                            seg[i][1]=y;
                        }else{
                            seg[i][0]=y+1;
                            seg[i][1]=0;
                        }
                        continue;
                    }
                    if (a[i][2]>0){
                        seg[i][1]=y;
                        double xp=1.0*(-a[i][0]*x-a[i][1]*y)/a[i][2];
                        int tp;
                        if (xp>0) tp=ceil(xp);
                        else tp=ceil(xp);
                        if (tp>seg[i][1]) seg[i][1]=0;
                        tp=max(1,min(y,tp));
                        seg[i][0]=tp;
                        continue;
                    }
                    seg[i][0]=1;
                    double xp=1.0*(-a[i][0]*x-a[i][1]*y)/a[i][2];
                    int tp;
                    if (xp>0) tp=floor(xp);
                    else tp=floor(xp);
                    if (tp<seg[i][0]) seg[i][0]=y+1;
                    tp=max(1,min(y,tp));
                    seg[i][1]=tp;
                }

                int best=0,bestz=1;
                for (int i=1;i<n;i++){
                    if (seg[i][0]>seg[i][1]) continue;
                   
                   
                    int subbest=0,subbestz;
                    for (int j=1;j<n;j++){
                        if (seg[j][0]<=seg[i][0]&&seg[j][1]>=seg[i][0]){
                            subbest++;
                        }
                    }
                    subbestz=seg[i][0];
                    if (subbest>best||subbest==best&&bestz>subbestz){
                        best=subbest;
                        bestz=subbestz;
                    }
                }
                if (best>ans||best==ans&&x<ansx||best==ans&&x==ansx&&y<ansy||best==ans&&y==ansy&&bestz<ansz){
                    ans=best;
                    ansx=x;
                    ansy=y;
                    ansz=bestz;
                }
            }
        }
        cout<<ans<<endl;
        vector<int> res;
        res.push_back(ansx);
        res.push_back(ansy);
        res.push_back(ansz);
        return res;
    }
};
关键词(Tag): c++ algorithm topcoder


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定