| ||||||||||
| 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 | |||||||||
Re:不明白这个为什么一直tle???In Reply To:不明白这个为什么一直tle??? Posted by:goshan at 2013-03-18 19:44:59 > // 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