|
发表于 2003-9-23 08:08:37
|
显示全部楼层
// test_CUMCM2003_B.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
double k_mount[10];
double y_mount[10];
double t_per[10];
double dc_time[5][10];
double sc_time[5][10];
int production[5][10];
int sum[5];
int _count[10];
ifstream infile("data.txt");
ofstream outfile("haomiao.out");
typedef vector<int> vec_int;
typedef vector<vec_int> vec_int_int;
vec_int_int result[5];
void initialization();
void readData();
void process();
void output();
void calc();
void initialization()
{
}
bool possible_k(int cp,int i,int j,int k)
{
double temp = (production[cp]*t_per+production[cp][j]*t_per[j]+production[cp][k]*t_per[k])/(production[cp]+production[cp][j]+production[cp][k]);
if (temp > 0.305 || temp < 0.285)
return false;
temp = production[cp]+production[cp][j]+production[cp][k];
if (temp < y_mount[cp]*10000)
{
return false;
}
return true;
}
bool possible_4_k(int cp,int i,int j,int k,int p)
{
double temp = (production[cp][p]*t_per[p]+production[cp]*t_per+production[cp][j]*t_per[j]+production[cp][k]*t_per[k])/(production[cp]+production[cp][j]+production[cp][k]+production[cp][p]);
if (temp > 0.305 || temp < 0.285)
return false;
temp = production[cp]+production[cp][j]+production[cp][k]+production[cp][p];
if (temp < y_mount[cp]*10000)
{
return false;
}
return true;
}
bool possible_y(int cp,int i,int j,int k)
{
double temp = production[cp]+production[cp][j]+production[cp][k];
if (temp < k_mount[cp]*10000)
{
return false;
}
return true;
}
bool possible_4_y(int cp,int i,int j,int k,int p)
{
double temp = production[cp]+production[cp][j]+production[cp][k]+production[cp][p];
if (temp < k_mount[cp]*10000)
{
return false;
}
return true;
}
void readData()
{
for(int i=0;i<10;i++)
{
infile>>k_mount;
}
for(i=0;i<10;i++)
{
infile>>y_mount;
}
for(i=0;i<10;i++)
{
infile>>t_per;
}
for(i=0;i<5;i++)
for(int j=0;j<10;j++)
{
infile>>dc_time[j];
}
for(i=0;i<5;i++)
for(int j=0;j<10;j++)
{
infile>>sc_time[j];
}
for(i=0;i<5;i++)
for(int j=0;j<10;j++)
{
infile>>production[j];
}
process();
output();
calc();
}
void process()
{
// search for A...(k)
for(int i=0;i<8;i++)
for(int j=i+1;j<9;j++)
for(int k=j+1;k<10;k++)
{
if (possible_k(0,i,j,k))
{
outfile<<"A:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
sum[0]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
result[0].push_back(temp);
}
}
for(i=0;i<7;i++)
for(int j=i+1;j<8;j++)
for(int k=j+1;k<9;k++)
for(int p=k+1;p<10;p++)
{
if (possible_4_k(0,i,j,k,p))
{
outfile<<"A:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
sum[0]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
temp.push_back(p);
result[0].push_back(temp);
}
}
// search for B...(k)
for(i=0;i<8;i++)
for(int j=i+1;j<9;j++)
for(int k=j+1;k<10;k++)
{
if (possible_k(1,i,j,k))
{
outfile<<"B:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
sum[1]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
result[1].push_back(temp);
}
}
for(i=0;i<7;i++)
for(int j=i+1;j<8;j++)
for(int k=j+1;k<9;k++)
for(int p=k+1;p<10;p++)
{
if (possible_4_k(1,i,j,k,p))
{
outfile<<"B:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
sum[1]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
temp.push_back(p);
result[1].push_back(temp);
}
}
// search for C...(k)
for(i=0;i<8;i++)
for(int j=i+1;j<9;j++)
for(int k=j+1;k<10;k++)
{
if (possible_y(2,i,j,k))
{
outfile<<"C:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
sum[2]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
result[2].push_back(temp);
}
}
for(i=0;i<7;i++)
for(int j=i+1;j<8;j++)
for(int k=j+1;k<9;k++)
for(int p=k+1;p<10;p++)
{
if (possible_4_y(2,i,j,k,p))
{
outfile<<"C:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
sum[2]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
temp.push_back(p);
result[2].push_back(temp);
}
}
// search for D...(k)
for(i=0;i<8;i++)
for(int j=i+1;j<9;j++)
for(int k=j+1;k<10;k++)
{
if (possible_y(3,i,j,k))
{
outfile<<"D:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
sum[3]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
result[3].push_back(temp);
}
}
for(i=0;i<7;i++)
for(int j=i+1;j<8;j++)
for(int k=j+1;k<9;k++)
for(int p=k+1;p<10;p++)
{
if (possible_4_y(3,i,j,k,p))
{
outfile<<"D:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
sum[3]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
temp.push_back(p);
result[3].push_back(temp);
}
}
// search for E...(k)
for(i=0;i<8;i++)
for(int j=i+1;j<9;j++)
for(int k=j+1;k<10;k++)
{
if (possible_y(4,i,j,k))
{
outfile<<"E:"<<i+1<<' '<<j+1<<' '<<k+1<<endl;
sum[4]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
result[4].push_back(temp);
}
}
for(i=0;i<7;i++)
for(int j=i+1;j<8;j++)
for(int k=j+1;k<9;k++)
for(int p=k+1;p<10;p++)
{
if (possible_4_y(4,i,j,k,p))
{
outfile<<"E:"<<i+1<<' '<<j+1<<' '<<k+1<<' '<<p+1<<endl;
sum[4]++;
vector<int> temp;
temp.push_back(i);
temp.push_back(j);
temp.push_back(k);
temp.push_back(p);
result[4].push_back(temp);
}
}
}
void output()
{
int total = 1;
for(int i=0;i<5;i++)
{
cout<<i+1<<' '<<sum<<endl;
total *= sum;
}
cout<<"total times need:"<<total<<endl;
}
void calc()
{
outfile<<endl<<endl;
int total_count = 0;
for(int i=0;i<result[0].size();i++)
{
for(int j=0;j<result[1].size();j++)
for(int k=0;k<result[2].size();k++)
{
cout<<"i:"<<i<<" j:"<<j<<" k:"<<k<<endl;
for(int p=0;p<result[3].size();p++)
for(int q=0;q<result[4].size();q++)
{
for(int _t=0;_t<10;_t++)
_count[_t] = 0;
for(int ii=0;ii<result[0].size();ii++)
_count[result[0][ii]]++;
for(int jj=0;jj<result[1][j].size();jj++)
_count[result[1][j][jj]]++;
for(int kk=0;kk<result[2][k].size();kk++)
_count[result[2][k][kk]]++;
for(int pp=0;pp<result[3][p].size();pp++)
_count[result[3][p][pp]]++;
for(int qq=0;qq<result[4][q].size();qq++)
_count[result[4][q][qq]]++;
bool OK = true;
int _sum = 0;
for(int ww=0;ww<10 && OK;ww++)
{
if (_count[ww] > 2)
OK = false;
if (_count[ww])
_sum++;
if (_sum > 7)
OK = false;
}
if (OK)
{
cout<<total_count++<<":"<<endl;
outfile<<endl<<"A:";
for(int iii=0;iii<result[0].size();iii++)
outfile<<result[0][iii]+1<<' ';
outfile<<endl<<"B:";
for(int jjj=0;jjj<result[1][j].size();jjj++)
outfile<<result[1][j][jjj]+1<<' ';
outfile<<endl<<"C:";
for(int kkk=0;kkk<result[2][k].size();kkk++)
outfile<<result[2][k][kkk]+1<<' ';
outfile<<endl<<"D:";
for(int ppp=0;ppp<result[3][p].size();ppp++)
outfile<<result[3][p][ppp]+1<<' ';
outfile<<endl<<"E:";
for(int qqq=0;qqq<result[4][q].size();qqq++)
outfile<<result[4][q][qqq]+1<<' ';
if (total_count >= 1000)
exit(0);
}
}
}
}
int main(int argc, char* argv[])
{
readData();
return 0;
}
|
|