HDU4726Kia's Calculation 贪心

#include
#include
#include
using namespace std;
const int maxn=1000010;
char a[maxn],b[maxn];
int hash1[15],hash2[15];
int main()
{
	int i,j,m,n,k;
	int t,cas=0;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%s%s",a,b);
		memset(hash1,0,sizeof(hash1));
		memset(hash2,0,sizeof(hash2));
		//printf("%s %s\n",a,b);
		int sb=strlen(a);
		for(i=0;i=0;i--)//分开判断第一位
		{
			for(j=1;j<=9;j++)
			{
				ok=(i-j+10)%10;
				if(hash1[j]&& hash2[ok]&& ok!=0) 
				{
				        if(i!=0)//和不能有前导0,比如9090和1010,那么最高位只能是0
						{
						   printf("%d",i);
					       flag=1;
						}
				    	hash1[j]--;
					    hash2[ok]--;
					    break;
				}
			}
			if(j<=8) break;
		}
		for(i=9;i>=0;i--)
		{
			if(i==0&&flag==0) continue;//flag==0说明前面第一位有前导0,且下面flag没变,即没输出
			for(j=0;j<=9;j++)
			{
				  ok=(i-j+10)%10;
				if(hash1[j]!=0 && hash2[ok]!=0)
				{
					num=hash1[j]>hash2[ok]?hash2[ok]:hash1[j];
					hash1[j]-=num;
					hash2[ok]-=num;
					for(k=0;k

你可能感兴趣的:(贪心和枚举)