| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
不明白这个为什么一直tle???// Sample Input
// 1 2 3 0 ; three different stamp types
// 7 4 0 ; two customers
// 1 1 0 ; a new set of stamps (two of the same type)
// 6 2 3 0 ; three customers
// Sample Output
// 7 (3): 1 1 2 3
// 4 (2): 1 3
// 6 ---- none
// 2 (2): 1 1
// 3 (2): tie
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <sstream>
#include <algorithm>
using namespace std;
bool inpute_data(vector<int> &stamps, vector<int> &val){
int temp = -1;
while(cin >>temp) {
int num = 0;
for (int i = 0; i < stamps.size(); ++i)
{
/* code */
if (stamps[i] == temp)
{
/* code */
num ++;
}
}
if (num < 5)
{
/* code */
stamps.push_back(temp);
}
if (temp == 0)
{
/* code */
break;
}
}
temp = -1;
while (cin >>temp) {
if (temp == 0)
{
/* code */
break;
}
val.push_back(temp);
}
return true;
}
string gen_key(vector<int> a){
stringstream ss;
sort(a.begin(), a.end());
for (int i = 0; i < a.size(); ++i)
{
/* code */
ss <<a[i] <<"-";
}
return ss.str();
}
int get_type_num(const vector<int> &a, const vector<int> &stamps){
set<int> temp;
for (int i = 0; i < a.size(); ++i)
{
/* code */
if (stamps[a[i]] != 0)
{
/* code */
temp.insert(a[i]);
}
}
return temp.size();
}
int get_sta_num(const vector<int> &a, const vector<int> &stamps){
int res = 0;
for (int i = 0; i < a.size(); ++i)
{
/* code */
if (stamps[a[i]] != 0)
{
/* code */
res ++;
}
}
return res;
}
int get_max_val(const vector<int> &a, const vector<int> &stamps){
int res = 0;
for (int i = 0; i < a.size(); ++i)
{
/* code */
if (stamps[a[i]] > res)
{
/* code */
res = stamps[a[i]];
}
}
return res;
}
void search(const vector<int> &stamps, const vector<int> &val, vector<int> &type_num, vector<string> &sol, vector<bool> &tie){
set <string> repeat;
vector<int> sta_num;
vector<int> max_val;
for (int m = 0; m < val.size(); ++m)
{
type_num.push_back(0);
sta_num.push_back(100);
max_val.push_back(0);
tie.push_back(false);
sol.push_back("");
}
for (int i = 0; i < stamps.size(); ++i)
{
for (int j = 0; j < stamps.size(); ++j)
{
for (int k = 0; k < stamps.size(); ++k)
{
for (int l = 0; l < stamps.size(); ++l)
{
int sum = stamps[i] + stamps[j] + stamps[k] + stamps[l];
for (int m = 0; m < val.size(); ++m)
{
/* code */
if (sum == val[m])
{
/* code */
vector<int> temp;
if (stamps[i] != 0)
{
/* code */
temp.push_back(i);
}
if (stamps[j] != 0)
{
/* code */
temp.push_back(j);
}
if (stamps[k] != 0)
{
/* code */
temp.push_back(k);
}
if (stamps[l] != 0)
{
/* code */
temp.push_back(l);
}
string key = gen_key(temp);
if (!repeat.count(key))
{
/* code */
repeat.insert(key);
int tn = get_type_num(temp, stamps);
int sn = get_sta_num(temp, stamps);
int mv = get_max_val(temp, stamps);
if (tn > type_num[m])
{
/* code */
type_num[m] = tn;
sta_num[m] = sn;
max_val[m] = mv;
tie[m] = false;
sol[m] = key;
}
else if (tn == type_num[m]){
if (sn < sta_num[m])
{
/* code */
sta_num[m] = sn;
max_val[m] = mv;
tie[m] = false;
sol[m] = key;
}
else if (sn == sta_num[m])
{
/* code */
if (mv > max_val[m])
{
/* code */
max_val[m] = mv;
tie[m] = false;
sol[m] = key;
}
else if (mv == max_val[m])
{
/* code */
tie[m] = true;
}
}
}
}
}
}
}
}
}
}
}
void output(const vector<int> &stamps, const vector<int> &val, vector<int> type_num, vector<string> &sol, vector<bool> &tie){
for (int i = 0; i < val.size(); ++i)
{
/* code */
if (sol[i] == "")
{
/* code */
for (int j = 0; j < i; ++j)
{
/* code */
if (val[i] == val[j])
{
/* code */
type_num[i] = type_num[j];
sol[i] = sol[j];
tie[i] = tie[j];
break;
}
}
if (sol[i] == "")
{
/* code */
cout <<val[i] <<" ---- none" <<endl;
continue;
}
}
cout <<val[i] <<" (" <<type_num[i] <<"):";
if (tie[i])
{
/* code */
cout <<" tie" <<endl;
}
else {
int pos = 0;
vector<int> res;
for (int j = 0; j < sol[i].length(); ++j)
{
/* code */
if (sol[i][j] == '-')
{
/* code */
int index = atoi(sol[i].substr(pos, j-pos).c_str());
res.push_back(stamps[index]);
pos = j+1;
}
}
sort(res.begin(), res.end());
for (int j = 0; j < res.size(); ++j)
{
/* code */
cout <<" " <<res[j];
}
cout <<endl;
}
}
}
int main(int argc, char const *argv[])
{
vector<int> stamps;
vector<int> val;
while (inpute_data(stamps, val)){
vector<int> type_num;
vector<string> sol;
vector<bool> tie;
search(stamps, val, type_num, sol, tie);
output(stamps, val, type_num, sol, tie);
stamps.clear();
val.clear();
if (cin.eof())
{
/* code */
return 0;
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator