Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

WA很多次..后人可以参考参考

Posted by sxyz007 at 2008-05-03 11:38:32 on Problem 2969
#include<iostream>
#include<string>
using namespace std;
#define maxn 2008
int sum,len,tot;
char str[maxn];

void Print(int p,int q) {
    char ans[maxn];
    int l=0;
    for (int i=0; i<len; i++) if (i!=p && i!=q) ans[l++]=str[i];
    while (str[l-1]=='0' && l>1) l--;
    if (ans[0]!='0') {
        for (int i=0; i<l; i++) if (ans[i]=='5') {
            swap(ans[0],ans[i]);
            break;
        }
        if (l>1) sort(ans+1,ans+l);
    }
    for (int i=l-1; i>=0; i--) printf("%c",ans[i]);
    printf("\n");
}

int main() {
    freopen("i","r",stdin);
    freopen("o","w",stdout);
   scanf("%s",str);
    len=strlen(str);
    sort(str,str+len);
    for (int i=0; i<len; i++) sum+=str[i]-'0';
    if (str[0]!='0') {
        tot=0;
        for (int i=0; i<len; i++) if (str[i]=='5') tot++;
        if (!tot) {
            puts("impossible");
            return 0;
        }
    }
    if (sum%3==0) {
        Print(len,len);
        return 0;
    }
    if (sum%3==1) {
        for (int i=0; i<len; i++) if ((str[i]-'0')%3==1) {
            Print(i,len);
            return 0;
        }
        for (int i=1; i<len; i++) if ((str[i]-'0')%3==2)
            for (int j=0; j<i; j++) if ((str[j]-'0')%3==2) {
                int tmp=0;
                if (str[i]=='5') tmp++;
                if (str[j]=='5') tmp++;
                if (str[0]=='0' || tmp<tot) {
                    Print(i,j);
                    return 0;
                }
            }
        puts("impossible");
        return 0;
    }
    if (sum%3==2) {
        for (int i=0; i<len; i++) if ((str[i]-'0')%3==2)
            if (str[0]=='0' || str[i]!='5' || tot>1) {
                Print(i,len);
                return 0;
            }
        for (int i=1; i<len; i++) if ((str[i]-'0')%3==1)
            for (int j=0; j<i; j++) if ((str[j]-'0')%3==1) {
                Print(i,j);
                return 0;
            }
        puts("impossible");
        return 0;
    }
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator