牛客竞赛每日俩题 - Day4
14天阅读挑战赛
目录
模拟+辗转相除法
DP作图分析状态方程
找到只出现一次的字符:
模拟+辗转相除法
小易的升级之路_牛客题霸_牛客网
思路:
辗转相除法
int gcd(int a,int b)
{int c;while(c=a%b){a=b;b=c;}return b;
}
#include <iostream>
#include<vector>
using namespace std;int gcd(int a,int b)
{int c;while(c=a%b){a=b;b=c;}return b;
}int getpw(int n,int power)
{vector<int> num(n);for(int i=0;i<n;i++)cin>>num[i];for(int i=0;i<n;i++){if(power>=num[i]) power+=num[i];else power+=gcd(power,num[i]);}return power;
}int main() {int n,a,power;while(cin>>n>>a){power=getpw(n,a);cout<<power<<endl;}return 0;
}
DP作图分析状态方程
计算字符串的编辑距离_牛客题霸_牛客网
思路:
传递公式:
- lev[i][j]用来表示字符串a的[1...i]和字符串b[1...j]的levenshtein距离;
- 插入和删除操作互为逆过程:a删除指定字符变b等同于b插入指定字符变a;
- 如果a[i] == b[j],则说明a[i]和b[j]分别加入a,b之后不会影响levenshtein距离,lev[i][j] = lev[i-1][j-1] + 0;
- 如果a[i] != b[j],则需要考虑3种情况的可能:
- a中插入字符,即lev[i][j] = lev[i-1][j] + 1;
- b中插入字符,即lev[i][j] = lev[i][j-1] + 1;
- a[i]替换成b[j],lev[i][j] = lev[i-1][j-1] + 1;
- 取这4种情况的最小值。
- 若两个字符相等,即str1[i-1] == str2[j-1],则在这一个位置的编辑距离和上一个字符相同,因此对应的数组dp[i][j]=dp[i-1][j-1];
- 若两个字符不相等,可删除str1[i-1]这个字符,则dp[i][j] = 1 + dp[i-1][j];删除str2[j-1]这个字符,则dp[i][j] = 1 + dp[i][j-1];修改str1[i-1]使它与str2[i-1]相等,则dp[i][j] = 1 + dp[i-1][j-1]。
#include <iostream>
#include<vector>
using namespace std;int mind(const string &s1,const string &s2)
{if(s1.empty()||s2.empty()) return max(s1.size(),s2.size());int len1=s1.size();int len2=s2.size();vector<vector<int>> f(len1+1,vector<int>(len2+1,0));for(int i=0;i<=len1;i++) f[i][0]=i;//初始化距离for(int j=0;j<=len2;j++) f[0][j]=j;//表示当另一个字符串为空时,该串的距离for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++){ // 判断word1的第i个字符是否与word2的第j个字符相等if(s1[i-1]==s2[j-1]){//相同,距离不需要增加f[i][j]=f[i-1][j-1];}else{int x=1+min(f[i-1][j],f[i][j-1]);//字符不同,需要增删替换,距离+1f[i][j]=min(x,1+f[i-1][j-1]);}}return f[len1][len2];
}int main() {string s1,s2;while(cin>>s1>>s2)cout<<mind(s1,s2)<<endl;return 0;
}
// 64 位输出请用 printf("%lld")
找到只出现一次的字符:
时间复杂度O(n^2)
char getFirstOneChar_3(const string& str) {for (int i = 0; i < str.size(); ++i) {int index1 = str.find(str[i]);int index2 = str.rfind(str[i]);if (index1 == index2)return str[i];}return -1;
}
O(n)
//hash法 O(n)
char getFirstOneChar_2(const string& str) {int hash[256] = {0};for (int i = 0; i < str.size(); ++i) //统计字符的次数hash[str[i]]++;for (int i = 0; i < str.size(); ++i) {if (hash[str[i]] == 1)return str[i];}return -1;
}
牛客竞赛每日俩题 - Day4相关推荐
- 牛客竞赛每日俩题 - Day12
目录 set的插入删除 vector<string>的应用 set的插入删除 数据库连接池__牛客网 [解题思路] 循环接收每组用例,对于每组用例进行如下操作: 1. 依次获取每个状态,如 ...
- 牛客竞赛每日俩题 - Day7
目录 经典01背包问题 二叉树遍历与构造(考研重点) 经典01背包问题 求正数数组的最小不可组成和_百度笔试题_牛客网 参考大佬题解: 动态规划:01背包问题(无物品价值),思想相同,题目最终要求有些 ...
- 牛客竞赛每日俩题 - Day9
目录 日期推算 分解因数 日期推算 美国节日__牛客网 思路: 首先,我们要想找到一个月第N个星期W,一定需要一个参照物,最好的目标当然是这个月的第一天.拿到参照物后,我要能得 到参照物的星期数,然后 ...
- 牛客竞赛每日俩题 - Day3
14天阅读挑战赛 目录 动态规划思想 经典DP 简单的数学问题 动态规划思想 查找两个字符串a,b中的最长公共子串_牛客题霸_牛客网 思路: 本题需要用动态规划求解,MCS[i][j] ...
- 牛客竞赛每日俩题 - 动态规划3
目录 类01背包问题,选or不选 变种走方格 类01背包问题,选or不选 不同的子序列_牛客题霸_牛客网 问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的 ...
- 牛客竞赛每日俩题 - Day2
14天阅读挑战赛 目录 字符串函数的熟练使用(模拟) 双指针+模拟+回溯 字符串函数的熟练使用(模拟) 扑克牌大小_牛客题霸_牛客网 别看题目很长,其实就是简单的斗地主,比较两手牌哪边大而已: 思路: ...
- 牛客竞赛每日俩题 - Day5
目录 DP+贪心 dfs迷宫问题(最短路径) DP+贪心 年终奖_牛客题霸_牛客网 思路: 定义f(i,j)表示从左上角走到坐标(i,j)处能获得的最大奖励. 搜索所有从左上角走到右下角的路径,找到最 ...
- 牛客竞赛每日俩题 - 动态规划2
目录 经典DP - 走方格 走方格2.0 分割回文串 分割回文串 - 回文优化 经典DP - 走方格 不同路径的数目(一)_牛客题霸_牛客网 状态: 子状态:从(0,0) 到达 (1, ...
- 牛客竞赛每日俩题 - Day1
14天阅读挑战赛 目录 排序+dfs+简单剪枝 贪心+模拟 排序+dfs+简单剪枝 幸运的袋子_牛客题霸_牛客网 思路: 对于任意两个正整数 a,b 如果满足 a+b>a b ,则必有 一个数为 ...
最新文章
- 读服务器文件,读取服务器文件
- Linux磁盘管理----分区格式化挂载fdisk、mkfs、mount
- Recover it!
- python真假命题_python中的命题演算
- 在vue单页应用中使用jquery
- SAP Hybris安装包里自带的Maven和Gradle
- YBTOJ:圈套问题(分治法、鸽笼原理)
- win7计算机个性化设置,笔记本电脑windows7系统如何用好电脑个性化设置
- centos 宝塔面板 mongodb 给新的数据库 创建登录用户和密码
- 基于Hmily实现TCC分布式事务解决方案
- 运输层课后第13题解析
- 拓端tecdat|R语言使用ARIMAX预测失业率经济时间序列数据
- 人脸识别demo使用教程
- python:Craps赌博游戏
- WIN10下CSF布料模拟算法
- 微信点拼多多砍价显示服务器吃撑,微信狠起来自己人都打?最严外链规范实行,微视、拼多多砍价链接被限制!...
- 《Web设计大全》读书笔记之一
- BSOJ2923 CODEVS1419 藤原妹红 最小生成树+树形dp
- 身份证最后一位校验码
- 消防工程师答题做试题模拟真题微信小程序,margin:25px 50px 75px 100px;