poj 1248 Safecracker

简介:

同样的理解题意很重要,我觉得可能这题作者的本意不是这么水,没那么简单可以暴力过的,但是我是暴力A了。。。

网上有用回溯的,字典树的。。。也有5重暴力,反正我是懒得看,暴力我还是有自信自己写的,说不定写的还好一些。。哈哈

我这个解法的亮点应该就是转换以后的sort(),这样算出来的一定是最大字典序的。。。一次A


题意:给定一个长度为5……12个不同字符组成的字符串,从中选取5个,设为v,w,x,y,z,要满足等式:v-w^2+x^3-y^4+z^5=target,现在给出字符串和target,求满足该条件的5个字符(字典序要最大)


AC的代码:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>

using namespace std;

char str[15];	//存输入的字符串
int strNum[15];	//上面字符串对应的数字


void Trans()
{
	int i;
	for(i=0;i<strlen(str);i++)
		strNum[i]=str[i]-'A'+1;
}


void forceSearch(int len,int target)
{
	int i,j,k,l,m;	//5重暴力counter

	//暴力主体  i是最高位的变量
	for(i=len-1;i>=0;i--)
		for(j=len-1;j>=0;j--)
		{
			if(j==i)
				continue;
			
			for(k=len-1;k>=0;k--)
			{
				if(k==i || k==j)
					continue;
				
				for(l=len-1;l>=0;l--)
				{
					if(l==i || l==j || l==k)
						continue;
					
					for(m=len-1;m>=0;m--)
					{
						if(m==i || m==j || m==k || m==l)
							continue;

						else if(strNum[i] - strNum[j]*strNum[j] + strNum[k]*strNum[k]*strNum[k] - strNum[l]*strNum[l]*strNum[l]*strNum[l] + strNum[m]*strNum[m]*strNum[m]*strNum[m]*strNum[m] == target)
						{
							printf("%c%c%c%c%c\n",strNum[i]-1+'A',strNum[j]-1+'A',strNum[k]-1+'A',strNum[l]-1+'A',strNum[m]-1+'A');
							return;
						}
					}
				}
			}
		}

		printf("no solution\n");
}


int main()
{
	int i;
	int target;
	while(scanf("%d%s",&target,str))
	{
		if(target==0 && strcmp(str,"END")==0)
			return 0;
		
		int len=strlen(str);		//存每次字符串的长度
		Trans();
		sort(strNum,strNum+len);
		
		//test      ok
		/*for(i=0;i<len;i++)
			printf("%d,",strNum[i]);
		printf("\n");*/
		
		forceSearch(len,target);
	}
	
	return 0;
}


相关文章
|
7月前
|
算法
Highways(POJ—2485)
Highways(POJ—2485)
poj 3298 数状数组
题目大意是一条大街上住着n个乒乓球爱好者,他们的水平高低用一个数值表示,他们经常举办比赛,比赛要三个人,一人当裁判。对裁判是有一定要求的,裁判的水平必须介于两选手之间且必须住他们中间,计算可以举办多少场比赛
45 0
|
人工智能 机器学习/深度学习
|
消息中间件 人工智能 JavaScript
|
存储
poj 1990 MooFest
点击打开poj 1990 思路: 树状数组 分析: 1 题目给定n头牛的听力v[i]. 现在规定两头你i和j如果要进行交流的话那么消耗的能量就是dis(i,j)*max(v[i].
751 0