Codeforces Round #131 (Div. 2) : B
首先能被2,5整除的数结尾必须是0;
如果没有0肯定不行;
然后判断他们的和ans%3:
如果==0,直接从大到小输出就行;
如果==1,要么删除它们之间最小的那个%3==1的,要么删除两个小的并且%3==2的;
如果==2,要么删除它们之中最小的那个%2==2的,要么删除两个小的并且%3==1的;
代码:
1 #include<iostream> 2 using namespace std; 3 int n,d[10],a,u; 4 main() 5 { 6 cin>>n; 7 while(n--)cin>>a,++d[a],u+=a; 8 if(u%3) 9 { 10 for(int i=1; i<10; ++i) 11 if(i%3==u%3 && d[i]) 12 --d[i],u-=i,i=10; 13 for(n=0; n<2; ++n) 14 for(int i=1; i<10; ++i) 15 if(u%3&&i%3&&d[i]) 16 --d[i],u-=i,i=10; 17 } 18 if(!u)d[0]=1; 19 if(!d[0]||u%3)cout<<-1; 20 else 21 for(int i=9; i>=0; --i) 22 while(d[i]--) 23 cout<<i; 24 return 0; 25 }