午夜的留言附属站 » 日志 » BestResult
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;
}
};
#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;
}
};
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
