返回题解分享
讨论 / 题解分享/ 帖子详情

日期统计(结果填空) - 题解

#include<bits/stdc++.h>
#include<algorithm>
#include<vector>
using namespace std;

int a[100], ans;
bool vis[20240000];

bool check(int data)
{
	if(vis[data])//日期已经访问过了 
	{
		return false;
	}
	vis[data] = 1;
	int mm = data / 100 % 100;
	int dd = data % 100;
	if(mm<1 || mm > 12)//月份是否合法 
	{
		return false;
	}
	if(mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12)
	{
		if(dd>=1 && dd<= 31)
		{
			return true;
		}
	}
	else if(mm == 2)
	{
		if(dd >= 1 && dd <= 28)
		{
			return true;
		}
	}
	else if(dd >= 1 && dd <= 30)
	{
		return true;
	}
	else
	{
		return false;
	}
}

void dfs(int x,int pos,int data)//x为遍历的下标 ,pos为当前八位遍历下标的位置,data为日期 
{
	if(x == 100)
	{
		return ;
	}
	if(pos == 8)
	{
		if(check(data))
		{
			++ans;
		}
		return ;
	}
	
	if((pos == 0 && a[x] == 2) ||
	   (pos == 1 && a[x] == 0) ||
	   (pos == 2 && a[x] == 2) ||
	   (pos == 3 && a[x] == 3) ||
	   (pos == 4 && a[x] >= 0 && a[x] <= 1) ||
	   (pos == 5 && a[x] >= 0 && a[x] <= 9) ||
	   (pos == 6 && a[x] >= 0 && a[x] <= 3) ||
	   (pos == 7 && a[x] >= 0 && a[x] <= 9))
		{
			dfs(x+1,pos+1,data*10+a[x]);//选上了 
		}
	
	dfs(x+1,pos,data);
}

int main()
{
	ios::sync_with_stdio(0);cin.tie(0);
	for(int i = 0;i < 100;i++)
	{
		cin>>a[i];
	}
	dfs(0,0,0);
	cout<<ans<<endl;
	
	return 0;            
}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!