NC240153. 一道难题
描述
输入描述
第一行一个整数 。
输出描述
一个整数,表示满足条件的数的个数。
示例1
输入:
2001
输出:
3
说明:
中,满足条件的数有:。C++(clang++ 11.0.1) 解法, 执行用时: 726ms, 内存消耗: 492K, 提交时间: 2022-09-18 20:33:50
#include<bits/stdc++.h> using namespace std; string s; int cnt=0; void dfs(string t,int x,int flag ) { if(t.size()>s.size()||(t.size()==s.size()&&t>s)) return; if(x>=3)flag=1; if(x>=3||flag) cnt++; dfs(t+'0',0,flag); dfs(t+'1',x+1,flag); } int main(){ cin>>s; dfs("1",1,0); cout<<cnt; }
pypy3 解法, 执行用时: 1188ms, 内存消耗: 50252K, 提交时间: 2022-09-20 23:33:07
import sys sys.setrecursionlimit(3000) ans=0 n=input() def dfs(s,num,flag): global ans,n if len(s)>len(n) or len(s)==len(n) and s>n: return if num>=3: flag=1 if flag: ans+=1 dfs(s+'0',0,flag) dfs(s+'1',num+1,flag) dfs('1',1,0) print(ans)
C++(g++ 7.5.0) 解法, 执行用时: 770ms, 内存消耗: 504K, 提交时间: 2022-09-25 22:45:16
#include<bits/stdc++.h> using namespace std; int c;string b; void d(string a,int t,int o){ if(a.size()>b.size()||a.size()==b.size()&&a>b)return; c+=o|=t>2;d(a+'0',0,o),d(a+'1',t+1,o); } int main(){cin>>b;d("1",1,0);cout<<c;}