CodeForces #78

A、水题,找到小数点即可。

B、水题,注意判断所有值的和是否能够整除n。

C、直接DFS出所有的排列,找出每种排列之后把所有旋转的情况全部标记一遍,生成每种排列后看看是否之前出现过即可。

附上一个写的很挫的代码

#include <stdio.h>

bool map[10000000];
char str[6];
int ret;
int vis[6];
char hash[6]={'R','O','Y','G','B','V'};
int ev[1000];

void Vis(int t)
{
	int now[10];
	int cas,i,j,k,up,T,l,p;
	T=t;
	cas=0;
	for (i=0;i<4;i++)
	{
		up=6;
		for (k=1;k<=6;k++)
		{
			now[up--]=t%10;
			t/=10;
		}
		t=0;
		for (j=1;j<=6;j++)
		{
			if (j==1 || j==6) t=t*10+now[j];
			else if (j>2) t=t*10+now[j-1];
			if (j==2) t=t*10+now[5];
		}
		ev[cas++]=t;
		map[t]=1;
	}
	t=T;
	p=cas;
	for (l=0;l<p;l++)
	{
		t=ev[l];
		for (i=0;i<4;i++)
		{
			up=6;
			for (k=1;k<=6;k++)
			{
				now[up--]=t%10;
				t/=10;
			}
			t=0;
			for (j=1;j<=6;j++)
			{
				if (j==2 || j==4) t=t*10+now[j];
				if (j==1) t=t*10+now[5];
				if (j==3) t=t*10+now[1];
				if (j==5) t=t*10+now[6];
				if (j==6) t=t*10+now[3];
			}
			map[t]=1;
			ev[cas++]=t;
		}
	}
	p=cas;
	t=T;
	for (l=0;l<p;l++)
	{
		t=ev[l];
		for (i=0;i<4;i++)
		{
			up=6;
			for (k=1;k<=6;k++)
			{
				now[up--]=t%10;
				t/=10;
			}
			t=0;
			for (j=1;j<=6;j++)
			{
				if (j==3 || j==5) t=t*10+now[j];
				if (j==1) t=t*10+now[4];
				if (j==2) t=t*10+now[1];
				if (j==4) t=t*10+now[6];
				if (j==6) t=t*10+now[2];
			}
			map[t]=1;
		}
	}
}

void DFS(int len,int val)
{
//	printf("%d..%d\n",len,val);
	int i,j,x;
	if (len==6)
	{
		if (map[val]==1) return;
		Vis(val);
	//	printf("%d\n",val);
		ret++;
	}
	for (i=0;i<6;i++)
	{
		if (vis[i]!=1)
		{
			vis[i]=1;
			for (j=0;j<6;j++)
			{
				if (hash[j]==str[i])
				{
					x=j+1;
					break;
				}
			}
			DFS(len+1,val*10+x);
			vis[i]=0;
		}
	}
}

int main()
{
	int i,j,n;
	scanf("%s",str);
	ret=0;
	DFS(0,0);
	printf("%d\n",ret);
	return 0;
}

后面两题基本上就没人出了……第三题做完就玩去了……orz……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值