赞
踩
数据
- 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2
- 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1
- 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3
审清题意:人家问的是这些数当中的子序列 有没有符合 2023mmdd 的 不是找能够多少个
答案:235
- #include<iostream>
- #include<cstring>
- #include<map>
- #include<set>
- using namespace std;
- int month[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};
- int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
- int a[110];
- int main()
- {
- for(int i=1;i<=100;i++) cin>>a[i];
- int sum=0;
- for(int i=1;i<=12;i++)
- {
- for(int j=1;j<=day[i];j++)
- {
- int b[8]={2,0,2,3,i/10,i%10,j/10,j%10};
- int l=0;
- for(int i=1;i<=100;i++)
- {
- if(b[l]==a[i])
- {
- l++;
- }
- if(l==8) break;
- }
- if(l==8) sum++;
- }
- }
- cout<<sum<<endl;
- return 0;
- }

答案:LLLV
- #include<iostream>
- #include<cstring>
- #include<queue>
- #include<map>
- using namespace std;
- map<string,bool>sg;
- // 判断是否仅存在一个空格(O)
- // 扫描字符串并对O的数量计数
- bool check(string str)
- {
- int cnt=0;
- for(int i=0;i<str.size();i++)
- {
- if(str[i]=='O') cnt++;
- }
- if(cnt==1) return true;
- return false;
- }
- /*
- * 后手必胜/必败
- */
- bool dfs(string str)
- {
- if(sg.count(str)) return sg[str];// 记忆化
- // 如果只有一个空位,也就是说后手必败
- if(check(str)) return sg[str]=false;
- /*
- * 模拟放一个的情况
- */
- for(int i=0;i<str.size();i++)
- {
- if(str[i]=='O')
- {
- string s=str;
- s[i]='X';
- // 可达必败均为必胜
- // 意思是存在当前选手下了某一步棋之后,后面的选手不管怎么下都必败
- if(!dfs(s)) return sg[str]=true;
- }
- }/*
- * 模拟放两个的情况
- */
- for(int i=0;i<str.size()-1;i++)
- { // i!=3是什么意思?因为这里是把两行排成一行了,不能第一行最后一个+第二行第一个算作连续两个
- if(str[i]=='O'&&str[i+1]=='O'&&i!=3)
- {
- string s=str;
- s[i]='X';
- s[i+1]='X';
- // 可达必败均为必胜
- if(!dfs(s)) return sg[str]=true;
- }
- }
-
- // 只达必胜均为必败
- // 排除了所有可能到达必败态的情况,接下来不管自己或者下一步对方怎么下对方都必胜,自己必败
- return sg[str]=false;
- }
- int main()
- {
- // 表示棋盘的四种状态
- string str[4]={"XOOOOOOO","XXOOOOOO","OXOOOOOO","OXXOOOOO"};
- for(int i=0;i<4;i++)
- {
- sg.clear();
- if(dfs(str[i])) cout<<"L";// 后手必胜
- else cout<<"V";
- }
- return 0;
- }

思路:从28把钥匙中选14(14钥匙一 一对应对应对的门) 然后让剩下的14把钥匙错排
错排公式
An=(n-1)*(An-1+An-2)
- #include<iostream>
- #include<algorithm>
- #define int long long
- using namespace std;
- const int N=30;
- int f[N];
- signed main()
- {
- int num=1,num1=1;
- for(int i=15;i<=28;i++) num*=i;
- for(int i=1;i<=14;i++) num1*=i;
- num/=num1;
- f[1]=0;
- f[2]=1;
- for(int i=3;i<=14;i++)
- {
- f[i]=(i-1)*(f[i-1]+f[i-2]);
- }
- cout<<f[14]*num<<endl;
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。