
逻辑题
hans774882968
这个作者很懒,什么都没留下…
展开
-
基数排序再预习——解答一道面试题
前端面试官:你不是说你算法很厉害嘛,怎么连基数排序的过程都记不得?本文并不是基数排序教程,只是一个备忘录,动机就是上面那句QAQ。网上很容易搜到那种朴素的基数排序实现:设基数为B,则维护一个大小为B的队列数组。每次循环先按位放入队列数组,然后不断取队首。这种实现的复杂度看上去很对,但跑起来不知道为什么就是很慢。回忆一下:正统的实现,是基于“桶求和”的。我们把每个数字v扔进计数桶:c[v]++,并求其前缀和。则c[v]的含义变为:数组里小于等于v的数的个数。当我们倒序遍历数组,遍历到a[j],则它在新数原创 2021-10-02 00:49:13 · 139 阅读 · 0 评论 -
CF1567C——两种解法:隔离的思想、状压dp;并拓展到一般情况
题意:定义了另一种加法,把加法进位的位置从i+1变为i+2。求满足x+y=n的(x,y)个数,x和y是正整数,1000组数据,n<=1e9一道让人思维开阔的好题。法一:隔离的思想。既然进位位置是i+2,那么i、i+2、i+4……和i+1、i+3、……是互不干扰的。于是我们惊奇地发现,按位置下标i模2的剩余类内部,进行的是正常的加法。因此我们按位置下标的奇偶,分出两个数,按乘法原理组合出方案即可。比如n=114514,分出141和154,其中一个方案是071+070=141,004+150=154,原创 2021-09-21 02:12:35 · 158 阅读 · 1 评论 -
LeetCode1927 求和游戏——挖掘性质的博弈论
先手=Alice,后手=Bob这题太难了QAQ这题有很多种分类讨论的方法,其中一种是按’?‘的个数分类。首先,如果’?'共有奇数个,先手必赢。因为最后一步是轮到先手,使得左侧==右侧的填法≤1个,但先手的填法有10个,任选一个使得左侧≠右侧即可。现在’?'共有偶数个。设问号多的那侧有q1个,对应的数字和为s1。于是有q2,s2。q1==q2。若s1==s2,后手赢。因为先手在某侧填了x,后手总是能在另一侧填x。否则先手赢。因为先手总是能选择在数字和大的那一侧填9,使得后手不能追上。q1.原创 2021-08-11 16:48:58 · 185 阅读 · 0 评论 -
经典逻辑题:猜牌问题——网上的结论是没问题的
猜牌问题:S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4黑桃J、8、4、2、7、3草花K、Q、5、4、6方块A、5约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?于是,S先生听到如下的对话:P先生:我不知道这张牌。Q先生:我知道你不知道这张牌。P先生:现在我知道这张牌了。Q先生:我也知道了。听罢以上的对话,S先生想了一想之后,就正确地原创 2021-07-02 01:45:33 · 5683 阅读 · 0 评论 -
逻辑题:谁是卸载按钮——cpp代码
这年头,小学数学没学好连卸载软件的资格都没有。下面只有一个按钮说了真话。那么谁是卸载按钮?A:是B!B:是D!C:不是我!D:B撒谎!非常常见的逻辑题了,小学3年级就开始见 。现在用代码来解决它。首先有2种实现思路,一种是枚举说真话的按钮,另一种是枚举卸载按钮(合理假设:卸载按钮有且只有1个)。前者貌似比后者难,因此我们枚举卸载按钮,并验证说真话的按钮个数是否等于1。#include <bits/stdc++.h>using namespace std;typedef lon原创 2021-07-02 01:16:13 · 245 阅读 · 0 评论