柚子快报激活码778899分享:算法 蓝桥杯(填空题)

http://yzkb.51969.com/

十四届

B组 日期统计(暴力枚举)

数据

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

#include

#include

#include

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<

return 0;

}

第十三届

A组 灭鼠先锋(博弈)

答案:LLLV 

#include

#include

#include

#include

using namespace std;

mapsg;

// 判断是否仅存在一个空格(O)

// 扫描字符串并对O的数量计数

bool check(string str)

{

int cnt=0;

for(int i=0;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

{

if(str[i]=='O')

{

string s=str;

s[i]='X';

// 可达必败均为必胜

// 意思是存在当前选手下了某一步棋之后,后面的选手不管怎么下都必败

if(!dfs(s)) return sg[str]=true;

}

}/*

* 模拟放两个的情况

*/

for(int i=0;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

#include

#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<

return 0;

}

 

柚子快报激活码778899分享:算法 蓝桥杯(填空题)

http://yzkb.51969.com/

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: