文章目录

  • 1.万万没想到之聪明的编辑
  • 2.万万没想到之抓捕孔连顺
    • 解法一:回溯(超时)
    • 解法二:确定区间后数学组合问题直接求解
  • 3.雀魂启动

1.万万没想到之聪明的编辑


直接暴力了!

#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <unordered_set>
#include <unordered_map>
using namespace std;int main() {int n; cin>>n;while(n--){string str;cin>>str;//AAA->AAfor(int i=2;i<str.length();i++){if(str[i]==str[i-1]&&str[i-1]==str[i-2]){str.erase(i,1);i--;}}//AABB->AABfor(int i=3;i<str.length();i++){if(str[i]==str[i-1]&&str[i-2]==str[i-3]&&str[i]!=str[i-2]){str.erase(i,1);i--;}}cout<<str<<endl;}return 0;
}

2.万万没想到之抓捕孔连顺




解法一:回溯(超时)

我想的是就从集合中选三个数,并且符合一定的条件,那就回溯呗,但其实用回溯没必要,因为如果确定了一个区间,从这个区间取三个数的取法可以直接一个数学公式搞定,而这样回溯求组合数虽然没毛病,但很明显有点小题大做了,最终过了两个样例,其他的超时!

#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <unordered_set>
#include <unordered_map>
using namespace std;int Count=0;
void backtracking(vector<int>& nums,vector<int> path,int startIndex,int d){if(path.size()==3){Count++;return;}for(int i=startIndex;i<nums.size();i++){path.push_back(nums[i]);if(nums[i]-path[0]<=d) backtracking(nums,path,i+1,d);path.pop_back();}
}int main() {//int n,d;cin>>n>>d;vector<int> nums(n);for(int i=0;i<n;i++){int a; cin>>a;nums[i]=a;}//backtracking(nums,vector<int>(0),0,d);cout<<Count%99997867<<endl;return 0;
}

解法二:确定区间后数学组合问题直接求解

1.首先不能位置重复,那么固定right求组和,因为每次的right都不一样,所以位置一定不会一样, 每次right+1都通过while循环动态维护first的位置,一旦确定,则可以用数学方法确定俩者之间所有的排列组合
2.上述数学思路:举例:(1 2 3 4 5)–6
6的位置即right位置,已确定,而包括first(1)的值有5个,在他们5个中找2个与last排列组合成3个数,C(5,2)=(5!)/((5-2)!2!),由此推导,C(last-first,2)=((last-first)!)/((last-first-2)!*2!)=(last-first)(last-first-1)/2。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;//求n个数任取两个的取法,也即Cn2
long long combinatorialNum_2(long long n) {return n*(n-1)/2;
}int main() {int n,d; cin>>n>>d;long long count = 0;vector<int> nums(n);for(int i=0;i<n;i++){cin>>nums[i];}//初始化就是left=0,right=2,因为选三个人小于三个就没结果直接略过for(int left=0,right=2;right<n;right++){//如果不符合条件left++,直到符合条件咱们再用数学公式算结果while(nums[right]-nums[left]>d){left++;}//不断地固定right,一个right对应一些组合最后加起来就好//如果left--right这个区间大于三个数了那才可以开始算//但算的是这个区间的个数减一取两个的取法,因为right是固定的,咱们是固定了right求组合数的if(right-left+1>=3) count+= combinatorialNum_2(right-left);}cout<<count%99997867<<endl;return 0;
}

3.雀魂启动



#include <iostream>
#include <vector>
#include <algorithm>using namespace std;bool isHu(vector<int> nums){//其实是一个dfs的过程if (nums.empty())    return true;//递归出口//记录与首元素相同的数字的个数,因为数组有序,并且最多出现4次,所以不用遍历所有区间int cnt = count(nums.begin(), nums.begin()+4, nums[0]);//注意:下面的几个if不能加上else奥,因为每种情况都需要考虑//取了雀头之后的size肯定能被3整除(因为除了雀头都是三个一组取的)if (nums.size() % 3 != 0 && cnt >= 2){//当前两个元素相等时,尝试以他两作为雀头if ( isHu(vector<int>(nums.begin() + 2, nums.end())) )   return true;}if (cnt >= 3){//尝试取一个刻子(三个相同的数字)if ( isHu(vector<int>(nums.begin() + 3, nums.end())) )    return true;}//首元素以顺子的形式出现//先判断首元素+1和+2的元素是否存在,只有同时存在才有可能构成顺子if(count(nums.begin(), nums.end(), nums[0]+1) > 0 && count(nums.begin(), nums.end(), nums[0] + 2) > 0){//把该顺子从数组中去掉,继续判断剩下的顺子vector<int> nums_new(nums.begin() + 1, nums.end());//去掉一个首元素(顺子的第一个)nums_new.erase(find(nums_new.begin(), nums_new.end(), nums[0] + 1));//去掉一个首元素+1(顺子的第二个)nums_new.erase(find(nums_new.begin(), nums_new.end(), nums[0] + 2));//去掉一个首元素+2(顺子的第三个)if (isHu(nums_new)) return true;}return false;
}int main(){vector<int> nums(13), count(10,  0);//已有的13张牌,以及计数器,记录每张牌出现的次数vector<int> res;for (int i = 0; i < 13; ++i){cin >> nums[i];++count[nums[i]];}    sort(nums.begin(), nums.end());//先排序for (int i = 1; i <= 9; ++i){//遍历下一张可能的牌if (count[i] == 4)    continue;//最多就4张,真的不能再多了auto it = lower_bound(nums.begin(), nums.end(), i);nums.insert(it, i);//插入iif(isHu(nums) )     res.push_back(i);   //判断是否okit = lower_bound(nums.begin(), nums.end(), i);nums.erase(it);//恢复原始nums数组}if (res.empty()) cout << 0 << endl;else{for (const auto &v : res)   cout << v <<" ";}return 0;
}

【公司真题--字节跳动】字节跳动2019春招研发部分编程题汇总相关推荐

  1. [C语言]字节跳动2019春招研发部分编程题

    1.万万没想到之聪明的编辑 题目描述: 我叫王大锤,是一家出版社的编辑.我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误.但是,优秀的人总能在平凡的工作中发现真理.我发现 ...

  2. 字节跳动2019春招研发部分编程题汇总(Python版本)

    一.万万没想到之聪明的编辑 王大锤是一家出版社的编辑,负责校对投稿来的英文稿件,他发现一个发现拼写错误的捷径: 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> ...

  3. 字节跳动2019春招研发部分编程题汇总【题解】

    差不多2个小时才AK,题目难度还行吧. 自己好菜. 题目地址:https://www.nowcoder.com/test/16516564/summary 目录 万万没想到之聪明的编辑 [模拟] 万万 ...

  4. 【牛客网】字节跳动2019春招研发部分编程题汇总

    1-万万没想到之聪明的编辑 解题思路 此题的编辑规则如下 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello 两对一样的字母(AABB型)连在一起,一 ...

  5. 字节跳动2019春招研发部分编程题汇总

    一:万万没想到之聪明的编辑 题目描述 给定一个字符串,按照要求修改字符串,输出最后的结果 1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello 2 ...

  6. 字节跳动2019春招研发部分编程题_N个建筑中选定3个埋伏地点_决定相距最远的两名特工间的距离不超过D_可行的埋伏方案

    题目 import java.util.Scanner;public class Main_N_D_Second_2 {private static int mod = 99997867;public ...

  7. 京东2019春招Java工程师编程题题解

    生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...

  8. 京东2018春招java_京东2019春招Java工程师编程题题解

    生成回文串 题目描述 对于一个字符串,从前开始读和从后开始读是一样的,我们就称这个字符串是回文串. 例如"ABCBA","AA","A"是回 ...

  9. 字节跳动2019春招研发机试题  万万没想到之聪明的编辑

    我叫王大锤,是一家出版社的编辑.我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误.但是,优秀的人总能在平凡的工作中发现真理.我发现一个发现拼写错误的捷径:..... // ...

最新文章

  1. LeetCode 45. Jump Game II--Python解法--动态规划
  2. 成功解决AttributeError: module ‘enum‘ has no attribute ‘IntFlag‘?
  3. 有关单点登录的几种方案
  4. 关于C语言中递归的一点点小问题
  5. 不可靠的信号、可靠信号
  6. “约见”面试官系列之常见面试题之第一百零五篇之v-if与v-show(建议收藏)
  7. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.解决办法
  8. linux 程序 减肥,程序减肥三步走
  9. python游戏设计毕业论文_游戏设计游戏策划毕业论文
  10. 对抗样本(三)FGSM
  11. 板簧的弹性系数如何计算_一种板簧总成的刚度计算方法、系统及可读存储介质与流程...
  12. 解决IPOD NANO7无法开机
  13. STM32定时器产生指定个数脉冲
  14. 笑谈游览器-有图有真相
  15. Qt 之字体文件(TTF)
  16. Junit单元测试报错Class not found可能原因
  17. 快速了解B+树的插入、删除操作
  18. MySQL8.0.15安装教程(Windows)
  19. java jdk 是什么_java中的jdk是做什么用的?
  20. 阿诺德给物体加描边_Arnold(C4DToA)阿诺德渲染教程(116):Arnold 如何抠透明通道?透明物体后期合成方案!...

热门文章

  1. Windows 10部署(FFU)
  2. JS逆向之Webpack 处理2
  3. Android中陀螺仪的使用
  4. 彩虹代刷商品怎么编辑html,彩虹代刷网修改订单数和交易金额教程
  5. 教你写个网页自动签到脚本
  6. iOS音视频的那些事儿(一):数据的采集和编码
  7. 保持城市天际线-c语言
  8. 商用密码合规性应用流程、标准及示例
  9. Oracle 隐藏参数:_undo_autotune
  10. Twinmotion 2019 对比 Lumion9 哪家强?