P7060 [NWRRC2014] Alarm Clock

思路:纯纯模拟题,但是模拟的复杂度也是不一样的

up版本(模拟时间的每一位,痛太痛了):


#include
using namespace std;
#define int long long
const int N=1e6+10;
int n1[3]= {6,2,5};
int n2[11]= {6,2,5,5,4,5,6,3,7,6};
int n3[7]= {6,2,5,5,4,5};
int n4[11]= {6,2,5,5,4,5,6,3,7,6};
int n;
void solve() {
	cin>>n;
	for(int i=0; i<=2; i++) {
		int m=9;
		if(i==2)m=3;
		for(int j=0; j<=m; j++) {
			for(int k=0; k<=5; k++) {
				for(int z=0; z<=9; z++) {
					if(n1[i]+n2[j]+n3[k]+n4[z]==n) {
						cout<>t;
	while(t--) {
		solve();
	}
	return 0;
}



神版本:

#include//万能头
using namespace std;
int n[10]={6,2,5,5,4,5,6,3,7,6},a,s;//预处理和定义
int main()
{
	cin>>a;
	for(int i=0;i<=23;i++) for(int j=0;j<60;j++)//开始枚举
	{
		s=0;//s统计段数
		s+=n[i%10];//累加小时的个位
		s+=n[i/10];//累加小时的十位
		s+=n[j%10];//累加分钟的个位
		s+=n[j/10];//累加分钟的十位
		if(s==a)
		{
			printf("%02d:%02d",i,j);//输出(printf可以自动补零,省去了if判断)
			return 0;
		}
	}
	cout<<"Impossible";//没有找到,就输出"Impossible"
	return 0;
}

over

你可能感兴趣的:(算法,c++,模拟)