zoukankan      html  css  js  c++  java
  • 100726A

    迭代深搜,从最深的地方搜,然后一个数被搜过了,标记用过,以后不再访问

    #include<iostream>
    #include<cstring>
    #include<map>
    #include<algorithm>
    using namespace std;
    map<int,int>use;
    int used[10];
    int n,ans,T,tar;
    string s;
    int a[10];
    bool isprime(int x)
    {
    	if(x<2)return false;
    	for(int i=2;i*i<=x;i++)if(x%i==0)return false;
    	return true;
    }
    void dfs(int d,int num)
    {
    	if(d==tar+1)return;
    	if(use[num])return;
    	if(isprime(num)&&!use[num])
    	{ans++;/*cout<<"num="<<num<<endl*/;}	
    	use[num]=1;
    	for(int i=0;i<n;i++)
    		if(used[a[i]]>0)
    		{used[a[i]]--;dfs(d+1,num*10+a[i]);used[a[i]]++;}
    }
    int main()
    {
    	cin>>T;
    	while(T--)
    	{
    		cin>>s;
    		n=s.length();
    		memset(used,0,sizeof(used));
    		ans=0;
    		use.clear();
    		for(int i=0;i<s.length();i++)
    		{a[i]=s[i]-'0';used[s[i]-'0']++;}
    		for(int i=n;i>=1;i--)
    		{
    			tar=i;
    			dfs(0,0);
    			if(ans==0)break;
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    空类型指针实践
    参数作用域实践
    内联函数实践:有疑惑未解决
    可变参数实践
    默认参数实践
    函数指针实践
    Windows下开发环境搭建
    Test
    C++ 左值与右值
    如何打包成多个资源文件
  • 原文地址:https://www.cnblogs.com/19992147orz/p/5998634.html
Copyright © 2011-2022 走看看