牛客网
Scut.小七cute
这个作者很懒,什么都没留下…
展开
-
牛客 蚂蚁坠落
WA了,应该是少了写一个判断,没有判断三只蚂蚁碰头的情况导致的误差。但是太困了 下次有空再改#include<bits/stdc++.h>using namespace std;/* 一根长度为1米的木棒上有若干只蚂蚁在爬动。 它们的速度为每秒一厘米或静止不动,方向只有两种, 向左或者向右。如果两只蚂蚁碰头,则它们立即交换速度并继续爬动。 三只蚂蚁碰头,则两边的蚂蚁交换速度,中间的蚂蚁仍然静止。 如果它们爬到了木棒的边缘(0或100厘米..原创 2020-05-18 00:35:09 · 146 阅读 · 0 评论 -
谁是你的潜在朋友 简单数学问题
/*首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。*/#include<bits/stdc++.h>using namespace std;int N,M;int main(){ while(cin>>N>>M) { //这里用一.原创 2020-05-17 00:06:09 · 225 阅读 · 0 评论 -
点菜问题 简单DP
#include<bits/stdc++.h>using namespace std;int C,N;vector<pair<int,int>>cai(101);int main(){ while(cin>>C>>N) { vector<int>dp(1001,0); for(int i=0;i<N;i++) { int P,V.原创 2020-05-14 19:07:46 · 146 阅读 · 0 评论 -
字符串排序(按长度) 极简哈希表
#include<bits/stdc++.h>using namespace std;int main(){ int n; string s; while(cin>>n) { multimap<int,string>m;//哈希表 getline(cin,s);//会有空格干扰 for(int i=0;i<n;i++)//除stop按size为key放入哈希表 .原创 2020-05-14 18:13:31 · 177 阅读 · 0 评论 -
日志排序 极简string+哈希表
/*有一个网络日志,记录了网络中计算任务的执行情况,每个计算任务对应一条如下形式的日志记录:“hs_10000_p”是计算任务的名称, “2007-01-17 19:22:53,315”是计算任务开始执行的时间“年-月-日 时:分:秒,毫秒”,“253.035(s)”是计算任务消耗的时间(以秒计)hs_10000_p 2007-01-17 19:22:53,315 253.035(s) 请你写一个程序,对日志中记录计算任务进行排序。 时间消耗少的计算任务排在前面,时间消耗多的计算任务排在后面..原创 2020-05-13 18:52:25 · 125 阅读 · 0 评论 -
SKEW数 string处理
/*在 skew binary 表示中,第 k 位的值 x[k] 表示 x[k]×(2^(k+1)-1)。每个位上的可能数字是 0 或 1,最后面一个非零位可以是 2,例如,10120(skew) = 1×(2^5-1) + 0×(2^4-1) + 1×(2^3-1) + 2×(2^2-1) + 0×(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44。前十个 skew 数是 0、1、2、10、11、12、20、100、101、以及 102。*/#include<bi.原创 2020-05-13 18:33:59 · 179 阅读 · 0 评论 -
大整数的因子 极简string处理
#include<bits/stdc++.h>using namespace std;/*已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.*/string s;int main(){ while(cin>>s) { int flag=0; if(s=="-1"){break;} for(int i = 2;i<10;i++) .原创 2020-05-13 18:04:55 · 129 阅读 · 0 评论 -
采药 递归(超时) 动规(AC)
超时的递归,记得递归函数里面的变量名千万不要取用过的,很容易出错/*有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。 我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。输入的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的的整..原创 2020-05-13 17:43:08 · 234 阅读 · 0 评论 -
数制转换 借助string使过程极其清晰
#include<bits/stdc++.h>using namespace std;#define ll long long int a,b;string n;int isuln(char c)//判断是uppercase还是lowercase还是num{ if(c-'0'>=0&&'9'-c>=0){return 1;} else if(c-'a'>=0&&'z'-c>=0){return 2;} .原创 2020-05-13 16:02:58 · 97 阅读 · 0 评论 -
牛客网 二叉树 先序遍历
/* 如上所示,由正整数1,2,3……组成了一颗特殊二叉树。 我们已知这个二叉树的最后一个结点是n。现在的问题是, 结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的, 结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。*/#include<bits/stdc++.h>using namespace std;vecto...原创 2020-05-11 23:11:51 · 246 阅读 · 0 评论 -
拦截导弹 简单动规 最长单调离散序列长度
#include<bits/stdc++.h>using namespace std;/*某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。 */int longest(vecto.原创 2020-05-11 22:11:42 · 99 阅读 · 0 评论 -
连通图 极简并查集
#include<bits/stdc++.h>using namespace std;/* 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。*/vector<int>fat(1001,0);int n,m,x,y;//并查集模版三步走void init(int n)//初始化自己为自己的父亲{ for(int i=1;i<=n;i++) { fat[i]=i; }}int find(int.原创 2020-05-11 21:29:58 · 118 阅读 · 0 评论 -
搬水果 哈弗曼树 优先级队列
#include<bits/stdc++.h>using namespace std;/*在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成一堆了。小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。假定每个水果重量都为 1,并且已知水果的种类数和每种水果的数目,你的任务是设计出合并的次序方案,使小明耗费的体.原创 2020-05-11 19:04:12 · 83 阅读 · 0 评论 -
最小面积子矩阵——压缩矩阵+动态规划(最短子序列),AC,极简版
/*一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积)*/#include<bits/stdc++.h>using namespace std;int M,N,K;int getK(vector<int>v,int K){ int l=0,r=0,dp=0,minans=INT_MAX,len=INT_MAX; while(r<M) { while(dp<K&am.原创 2020-05-10 23:35:07 · 468 阅读 · 0 评论 -
计算表达式 牛客网 (accumulate默认返回int型)
#include<bits/stdc++.h>using namespace std;vector<double>dp(101,0);int main(){ char c; double n,t; cin>>t; dp[1]=t; int i=1; while(cin>>c) { cin>>n; //cout<<n<&.原创 2020-05-10 20:18:29 · 148 阅读 · 0 评论 -
数字反转 极简思路string
#include<bits/stdc++.h>using namespace std;int n;string s1,s2;int main(){ //cin>>n; while(cin>>s1>>s2)//以字符串读入 { //p2r int res1=atoi(s1.c_str())+atoi(s2.c_str());//转成数字相加 strin.原创 2020-05-10 18:17:16 · 223 阅读 · 0 评论 -
最小花费 (牛客火车站) 动态规划 极简版
/*在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下: 距离s 票价 0<S<=L1 C1 L1<S<=L2 C2 L2<S<=L3 C3 输入保证0<L1<L2<L3<10^9,0<C1<C2<C3<10^9。 每两个站之间的距离不超过L3。 当乘客要移动的两个站的距离大于L3的时候,可以选择.原创 2020-05-09 21:44:04 · 378 阅读 · 0 评论 -
二叉树遍历 (递归) 前序+中序转后序,简单易懂
#include<iostream>#include<algorithm>using namespace std;void Post(string str1,string str2){ if(str1.length()==0) return; int root=str2.find(str1[0]);//前序第一个是根 Post(str1.substr(1,root),str2.substr(0,root));//根的左子树 Post(s.原创 2020-05-09 18:42:52 · 106 阅读 · 0 评论 -
杨辉三角 递归
#include<bits/stdc++.h>using namespace std;/*输入n值,使用递归函数,求杨辉三角形中各个位置上的值。*/int dfs(int x,int y){ if(x==1||y==1||x==y){return 1;} if(x==2){return 1;} return dfs(x-1,y)+dfs(x-1,y-1);}int main(){ int n; while(cin>.原创 2020-05-09 18:23:33 · 357 阅读 · 0 评论 -
最大序列和 动态规划
#include<bits/stdc++.h>using namespace std;#define ll long long /*给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。对于S的所有非空连续子序列T,求最大的序列和。 变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。*/int main(){ //显然是dp int n; while(cin>>.原创 2020-05-09 18:22:31 · 136 阅读 · 0 评论 -
查找学生信息 牛客网 哈希表 按序号存储信息(key为序号,value为信息)
#include<bits/stdc++.h>using namespace std;int main(){ int n; while(cin>>n) { map<string,vector<string>>m; for(int i=0;i<n;i++) { string tmps; cin>>tmp.原创 2020-05-08 22:10:25 · 331 阅读 · 0 评论 -
求最大值 (priority_queue初尝试)——堆
#include<bits/stdc++.h>using namespace std;int main(){ int x; while(cin>>x) { priority_queue<int>q; q.push(x); for(int i=0;i<9;i++) { cin>>x; q.push(x); .原创 2020-05-08 19:25:21 · 179 阅读 · 0 评论 -
百鸡问题 递归超时,for循环可以AC
#include<bits/stdc++.h>using namespace std;/*用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。1/3不好算,改成:3*n元去买100只鸡,大鸡15元/只,小鸡9元/只,还有1元每只的小小鸡*/set<pair<int,int>>s;void dfs(int x,int y,int price){ int z=.原创 2020-05-08 19:21:41 · 139 阅读 · 0 评论 -
继续xxx定律(所谓关键数,就是不会出现在输入数组a[i]的其他n-1个数字的覆盖数中)
#include<bits/stdc++.h>using namespace std;/* 对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。 请计算需要经过几步才能将n变到1,具体可见样例。 当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1, 将3称为关键数,5,8,4,2称为覆盖数。现在输入n个数字a[i],根据关键数与覆盖数的理论, 我们只需要验证其中部.原创 2020-05-08 18:35:12 · 205 阅读 · 0 评论 -
还是畅通工程——最小生成树、 Prim算法
#include<bits/stdc++.h>using namespace std;/*测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。 当N为0时,输入结束,该用例不被处理。*/i...原创 2020-05-08 16:33:25 · 180 阅读 · 1 评论 -
畅通工程 并查集(有环图时出错的改进)+(几次错误的更正)
首先想到的是最标准的并查集但是WA了,因为图有环,导致一个环内有2个father节点(只被他人指向而不指向他人,导致的结果)···思索到最后····最后看来其实这也对了,依然是union函数错了(注释掉的部分),改掉之后AC了fat[x]=find(fat[y]);union中注释掉的部分这样的写法就会导致fat没有连接到最高比如1-5,3-5,1-9,3-9这样会导...原创 2020-05-07 23:00:05 · 92 阅读 · 0 评论 -
最大上升子序列和 动规 (也可以递归,但是好像并没有简化代码,反而浪费了空间)
#include<bits/stdc++.h>using namespace std;/*一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ...,aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ...原创 2020-05-06 23:10:14 · 89 阅读 · 0 评论 -
Freckles 牛客 dijkstra(WA)换prim(AC) (dijkstra是最短路径,与最小生成树本质不同)
WA,给的那个测试用例可以通过#include<bits/stdc++.h>using namespace std;/*求把点连起来的最小路径,kruskal?dijkstra?*/int main(){ //kruskal用到并查集 //dijkstra不用 int n; while(cin>>n)...原创 2020-05-06 18:28:52 · 113 阅读 · 0 评论 -
最大子矩阵——想了各种动归,就是没想到暴力(以为4重循环必超时)
转自这位大佬https://blog.csdn.net/weixin_41675900/article/details/87866290实在写不出来,仅转来学习#include<bits/stdc++.h>using namespace std;/*已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。比如,...转载 2020-05-06 00:03:43 · 198 阅读 · 0 评论 -
Number Steps 注意测试用例和实际用例完全不同
很坑,用例会给一个n,告诉下面有几个坐标 ,实际测试不会给,导致数据错误#include<bits/stdc++.h>using namespace std;/*Starting from point (0,0) on a plane, we have written all non-negative integers 0,1,2, ... as shown in t...原创 2020-05-05 21:16:57 · 166 阅读 · 0 评论 -
合唱队形 动归,也可dp(将2层for改成:每次递归对其他位置扫描一遍最长序列)
理解错了 WA一开始的理解是可以随便动位置,但是Ti必须得有两个人,中间站两个一样高的其实是把人抽走,然后剩下来的人可以组成山脉序列附WA#include<bits/stdc++.h>#include<algorithm>using namespace std;/*N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换...原创 2020-05-05 21:00:44 · 101 阅读 · 0 评论 -
简单密码 哈希表
#include<bits/stdc++.h>using namespace std;/*Julius Caesar曾经使用过一种很简单的密码。 对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。比如字符A用F来代替。如下是密文和明文中字符的对应关系。 密文 A B C D E F G H I J K L M N O P Q R S T U ...原创 2020-05-05 18:07:08 · 616 阅读 · 0 评论 -
Interger Inquiry 数字太长可能达到103位,采用string处理
#include<bits/stdc++.h>using namespace std;/*BIT的新超算的第一批使用者之一是薯片人,他对0~333的 3to go数字加大力度。输入最多100行,每行小于100位,全为正数,但可能有前置0求所有输入的和*/string ans;string s;void trim0(string &s){ auto...原创 2020-05-05 17:41:40 · 128 阅读 · 0 评论 -
吃糖果 递归+动态规划
#include<bits/stdc++.h>using namespace std; /* 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0)。 妈妈告诉名名每天可以吃一块或者两块巧克力。 假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。 例如: 如果N=1,则名名第1天就吃掉它,共...原创 2020-05-05 17:04:45 · 322 阅读 · 0 评论 -
加减乘除 用switch可能会更快
#include<bits/stdc++.h>using namespace std;int fac(int k){ if(k==1){return 1;} else return k*fac(k-1);}int cal(int a,char x,int b){ if(x=='+'){ return a+b; } el...原创 2020-05-05 16:48:56 · 181 阅读 · 0 评论 -
数字求和 还可以sort后用find+acumulate或者sort后用折半查找,不知道会不会更快
#include<bits/stdc++.h>using namespace std;int main(){ int a;string s; while(getline(cin,s)) { string tmp; vector<int>v; for(auto i:s)//一次get一行,将数字提取...原创 2020-05-05 16:33:21 · 105 阅读 · 0 评论 -
数字之和
#include<bits/stdc++.h>using namespace std;#define ll long long ll getans1(string s){ ll tmp=0; for(auto i:s) { tmp+=i-'0'; } return tmp;} ll getans2(str...原创 2020-05-04 22:12:47 · 117 阅读 · 0 评论 -
字符串的反码
#include<bits/stdc++.h>using namespace std;bool islow(char c){ return (c-'a'>=0&&c-'a'<26);}bool isup(char c){ return (c-'A'>=0&&c-'A'<26);}char re...原创 2020-05-04 22:00:13 · 552 阅读 · 0 评论 -
字母统计 (map底层是红黑树,但我喜欢当哈希表用)
#include<bits/stdc++.h>using namespace std;int main(){ char c ; map<char,int>m; for(int i=0;i<26;i++) { m[i+'A']=0; } while(cin>>c) { ...原创 2020-05-04 21:10:02 · 142 阅读 · 0 评论 -
棋盘游戏 BFS WA,DFS AC (原以为会超时)
bfs:#include<bits/stdc++.h>using namespace std;/* 有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置, 请找出一个从起始位置到终止位置代价最小的路径: 1、只能沿上下左右四个方向移动 2、总代价是没走一步的代价之和 3、每步(从a,b...原创 2020-05-04 20:30:29 · 150 阅读 · 0 评论