| ||||||||||
| 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 | |||||||||
求组数据,老是WA#include <iostream>
#include <set>
#include <vector>
#include <stack>
using namespace std;
int flag;
vector<int>res;
int typer ;
void stamp(multiset<int> &s, int left,stack<int> &st,int type,multiset<int> ::iterator it,int n,int f){
if(n >3) return;
for(multiset<int> ::iterator it1 = it;it1 != s.end();it1++){
st.push((*it1));
if( it1 != it ||(it1 == it &&f))
type ++;
if((*it1) < left){
stamp(s,left - (*it1),st,type,it1,n+1,0);
}
else if((*it1) == left){
if(type == typer && st.size() == res.size() &&st.top() == res[res.size()-1]){
flag = 2;
}
else if((type > typer) || (type == typer && st.size() < res.size()) || (type == typer && st.size() == res.size() && st.top() > res[res.size()-1])){
res.clear();
while(!st.empty()){
res.push_back(st.top());
st.pop();
}
for(int i = res.size()-1;i>=0;i--)
st.push(res[i]);
flag = 3;
typer = type;
}
}
st.pop();
if(it1 != it ||(it1 == it &&f))
type--;
}
}
int main(int argc, char* argv[])
{
multiset <int> s;
vector <int> v;
stack <int> st;
int n;
int type;
// FILE *fp = fopen("a.txt","r");
while(scanf("%d",&n)!= EOF){
s.clear();
v.clear();
s.insert(n);
while(scanf("%d",&n) && n)
s.insert(n);
while(scanf("%d",&n) && n)
v.push_back(n);
for(int i = 0;i<v.size();i++){
res.clear();
type = 0;
typer = 0;
flag = 1;
stamp(s,v[i],st,type,s.begin(),0,1);
if(flag == 1) printf("%d%s\n",v[i]," ---- none");
else if(flag == 2) printf("%d %c%d%s%s\n",v[i],'(',typer,"):"," tie");
else{
printf("%d %c%d%s",v[i],'(',typer,"): ");
for(int j = res.size()-1;j >=0;j--)
if(j>0)printf("%d ",res[j]);
else printf("%d",res[j]);
printf("\n");
}
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator