目录

错排算法

三维数组的应用


错排算法

发邮件__牛客网

错排:
假设有n封信要装入到n个信封中,每封信应该要放到对应的信封中,比如:

信:   A B C D...
信封: a b c d. ...
由于疏忽将信放置出错,总共有多少种可能性每封信都放错

假设:D(n)表示n封信总共装错的总数

如果A装入到b的信封中:

  • 将B信装入到A的信封中(a、b互相放错形成独立): A-->b B-->a出错的总数:取决于剩余的n-2封信: D(n-2)
  • 将B信装入到除A以外的其他信封(只有A与b完成独立):剩余n-1封信放错的可能性为D(n-1)

所以A装错到b的信封后有D(n-1) +D(n-2)种出错数
同理,如果将A装入到C、D、E (n-2)*(D(n-1)+D(n-2));

总的出错总数:(n-1)*(D(n-1)+D(n-2));

特殊的:

如果是0封信:D(0)--->0

如果是1封信:D(1)--->0

如果是2封信: D(2)--->1

#include<iostream>
using namespace std;int main()
{long long d[21]={0,0,1};for(int i=3;i<=20;i++){d[i]=(i-1)*(d[i-1]+d[i-2]);}int n;while(cin>>n)cout<<d[n]<<endl;return 0;
}

三维数组的应用

五子棋__牛客网

核心在于构建三维数组以遍历方向;

int d[横竖斜线][两个小方向][坐标x,y]={ {{x1,y1},{x2,x2}},{...},{},{} }

可以理解为二维数组里面存数组,例如 int a[][]={ {【数组】},{...},{} }

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define N 20
int count(string table[], char ch, int x, int y)
{int maxc = 0;int dir[4][2][2] = { {{ -1,0 },{ 1,0 }},{{ 0,-1 },{ 0,1 }},{{ -1,-1 },{1,1 }},{{ -1,1 },{ 1,-1 }} };for (int i = 0; i < 4; ++i) // 四种方向{int c = 0;for (int j = 0; j < 2; ++j) // 两个小方向{int nx = x, ny = y;while (nx >= 0 && nx < N && ny >= 0 && ny < N && table[nx][ny] ==ch){nx += dir[i][j][0];ny += dir[i][j][1];++c;}}maxc = max(maxc,c);}return maxc - 1; //统计两个方向(如横向的左右两个方向)的时候,//当前棋子被计算了两次
}
bool solve(string table[])
{// 遍历棋谱,如果某个位置有棋子,再想该位置进行搜索for (int i = 0; i < N; ++i){for (int j = 0; j < N; ++j){if (table[i][j] == '*' || table[i][j] == '+')// 当某个位置有连在一起的棋子,结束搜索if (count(table, table[i][j], i, j) >= 5)return true;}}return false;
}
int main()
{string table[N];while (cin >> table[0]){for (int i = 1; i < N; ++i)cin >> table[i];cout << (solve(table) ? "Yes" : "No") << endl;}return 0;
}

牛客竞赛每日俩题 - Day14相关推荐

  1. 牛客竞赛每日俩题 - Day12

    目录 set的插入删除 vector<string>的应用 set的插入删除 数据库连接池__牛客网 [解题思路] 循环接收每组用例,对于每组用例进行如下操作: 1. 依次获取每个状态,如 ...

  2. 牛客竞赛每日俩题 - Day7

    目录 经典01背包问题 二叉树遍历与构造(考研重点) 经典01背包问题 求正数数组的最小不可组成和_百度笔试题_牛客网 参考大佬题解: 动态规划:01背包问题(无物品价值),思想相同,题目最终要求有些 ...

  3. 牛客竞赛每日俩题 - Day9

    目录 日期推算 分解因数 日期推算 美国节日__牛客网 思路: 首先,我们要想找到一个月第N个星期W,一定需要一个参照物,最好的目标当然是这个月的第一天.拿到参照物后,我要能得 到参照物的星期数,然后 ...

  4. 牛客竞赛每日俩题 - Day3

    14天阅读挑战赛 目录 动态规划思想 经典DP 简单的数学问题 动态规划思想 查找两个字符串a,b中的最长公共子串_牛客题霸_牛客网 思路:         本题需要用动态规划求解,MCS[i][j] ...

  5. 牛客竞赛每日俩题 - 动态规划3

    目录 类01背包问题,选or不选 变种走方格 类01背包问题,选or不选 不同的子序列_牛客题霸_牛客网 问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的 ...

  6. 牛客竞赛每日俩题 - Day2

    14天阅读挑战赛 目录 字符串函数的熟练使用(模拟) 双指针+模拟+回溯 字符串函数的熟练使用(模拟) 扑克牌大小_牛客题霸_牛客网 别看题目很长,其实就是简单的斗地主,比较两手牌哪边大而已: 思路: ...

  7. 牛客竞赛每日俩题 - Day5

    目录 DP+贪心 dfs迷宫问题(最短路径) DP+贪心 年终奖_牛客题霸_牛客网 思路: 定义f(i,j)表示从左上角走到坐标(i,j)处能获得的最大奖励. 搜索所有从左上角走到右下角的路径,找到最 ...

  8. 牛客竞赛每日俩题 - 动态规划2

    目录 经典DP - 走方格 走方格2.0 分割回文串 分割回文串 - 回文优化 经典DP - 走方格 不同路径的数目(一)_牛客题霸_牛客网 状态:         子状态:从(0,0) 到达 (1, ...

  9. 牛客竞赛每日俩题 - Day1

    14天阅读挑战赛 目录 排序+dfs+简单剪枝 贪心+模拟 排序+dfs+简单剪枝 幸运的袋子_牛客题霸_牛客网 思路: 对于任意两个正整数 a,b 如果满足 a+b>a b ,则必有 一个数为 ...

最新文章

  1. 【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流
  2. 一.MongoDB简介
  3. Hadoop Hive sql语法详解
  4. BZOJ3139/BZOJ1306 HNOI2013比赛/CQOI2009循环赛(搜索)
  5. 把握linux内核设计思想(十二):内存管理之slab分配器
  6. mysql 学习笔记 02创建表
  7. replace使用案例--替换空格
  8. 由ORA-28001同一时候带出ORA-28000的解决的方法
  9. 阿里粗排技术体系与最新进展
  10. ffmpeg源码分析:transcode()函数
  11. Python爬虫知识点四--scrapy框架
  12. 浅谈Java、Python、C++、PHP、JavaScript5大编程语言该如何选择
  13. ESlint 配置从0到1 (二)
  14. java程序员必须会的技能
  15. 如何把EXCEL 中的表格复制到WORD 中后不显示网格线?
  16. html5橡皮擦,HTML5 Canvas笔记——实现橡皮擦功能,包括矩形擦和圆形擦。
  17. UML 用例图符号含义
  18. 小新想把百度搜索引擎改为edge
  19. LeetCode1221.分割平衡字符串1894.找到需要补充粉笔的学生编号(C++)
  20. 如何快速理解最大流和最小割

热门文章

  1. 四级选词填空必会30词
  2. 我学习VC中所得的点点心得
  3. 【初识计算机】计算机的三大核心硬件——CPU、内存、硬盘
  4. 查询网址 连接虚拟机,vi编辑开启ens33网络
  5. 常见邮箱开启 SMTP 服务及 Python 发送 email 详细说明
  6. 如何回答:你有什么样的职业规划
  7. 微信小程序数据存储与取值
  8. 好的js特效网站!!!
  9. IFC格式BIM文件处理方案概述
  10. 从玉农业谋定产业化-农业大健康·林裕豪:国家重点龙头企业