目录

错排算法

三维数组的应用


错排算法

发邮件__牛客网

错排:
假设有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. 【综述】MV3D-Net、AVOD-Net 用于自动驾驶的多视图3D目标检测网络
  2. linux 下获取程序的绝对路径
  3. JBPM4.4_jBPM4.4应用(与Spring集成自行控制事务等)
  4. OpenCV图像增强(一)——多尺度视网膜增强
  5. linux远程跳板机超时
  6. 浦发银行招聘计算机类笔试题,2019浦发银行招聘计算机模拟试题及答案
  7. print的describe的展示全部数据_大数据项目中的QA需要迎接新的挑战
  8. Java案例:通过循环打印一颗爱心
  9. Android 应用资源及R文件的位置
  10. Openstack安装(1)--keystone安装
  11. tftp java_TFTP服务器搭建
  12. hdu6287(分解质因数+二分)
  13. 个人职场工作感悟总结「如何尽快地提升自我」
  14. 如何在iPhone 12上管理5G设置来保护流量和电池续航
  15. Android 自定义锁屏_开发自定义ROM提速:红米Note 6 Pro等Android Pie内核源代码上线...
  16. JWT signature does not match locally computed signature. JWT validity cannot be asserted and should
  17. Netty实战二-实现UDP的单播和广播
  18. 一头 一头百兆全双工 自动协商 测试
  19. Java经典好资源-[http://blog.csdn.net/miaogang]
  20. 精灵骑士二觉_dnf精灵骑士二觉

热门文章

  1. 【如何系统的学习it技术】
  2. unity 黑暗之光商人模型建立
  3. Java学习之阶段小结
  4. 记:《洛克菲勒留给儿子的38封信》-- 13
  5. Linux虚拟机ens33无法连接问题
  6. 88-On Balance Volume 能量潮指标.(2015.7.4)
  7. LeetCode 49. 字母异位词分组 Group Anagrams
  8. 保障企业总部与各分支机构之间数据传输的安全性------实验案例解析
  9. 小程序内容不符合规则
  10. Linux 清除历史操作命令