| ||||||||||
| 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 | |||||||||
AC C++ code给不停WA/TLE的C++ er们一点参考
code很丑,见谅……
#include <iostream>
#include <algorithm>
using namespace std;
bool tie;
int n,m,t,i,a[100],b[100],x[100],used[100],tx[100],tmax[10];
int ans,ansnum,ansmax,ansrec[100];
int mmax,num,tnum,last;
bool same()
{
if (num!=ansnum) return false;
for (int iii=0;iii<num;iii++)
if (ansrec[iii]!=x[iii]) return false;
return true;
}
void dfs(int get,int kind)
{
if (get==b[i])
{
if ((kind>ans)||((kind==ans) &&(ansnum>num))||((kind==ans)&&(ansnum==num)&&(mmax>ansmax)))
{
tie=false;
ans=kind;
ansnum=num;
ansmax=mmax;
for (int iii=0;iii<num;iii++) ansrec[iii]=x[iii];
return;
};
if ((kind==ans)&&(ansnum==num)&&(ansmax==mmax)&&(!same()))
{
tie=true;
return;
}
return;
}
if ((get>b[i])||(num>=4)) return;
for (int ii=last;ii<n;ii++)
{
used[ii]++;
tmax[num]=mmax;
num++;
last=ii;
mmax=a[ii]>mmax?a[ii]:mmax;
x[num-1]=ii;
dfs(get+a[ii],kind+(used[ii]==1));
mmax=tmax[num];
num--;
used[ii]--;
}
}
void solve()
{
for (i=0;i<m;i++)
{
for (int j=1;j<=4;j++) x[j]=0;
for (int j=0;j<m;j++) used[j]=0;
tie=false;
mmax=0;
num=0;
ans=0;
ansmax=0;
ansnum=10000;
last=0;
dfs(0,0);
if (!ans) {cout<<b[i]<<" ---- none"<<endl; continue;}
cout<<b[i]<<" ("<<ans<<")"<<": ";
if (tie) cout<<"tie"<<endl;
else
{
for (int ii=0;ii<ansnum-1;ii++) cout<<a[ansrec[ii]]<<" ";
cout<<a[ansrec[ansnum-1]]<<endl;
}
}
}
int main()
{
while (cin>>t)
{
n=1; a[0]=t; cin>>t;
while (t) {n++; a[n-1]=t; cin>>t;}
m=0; cin>>t;
while (t) {m++; b[m-1]=t; cin>>t;}
solve();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator