首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
课程
专栏·文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
hpu_hdy
获赞
3
粉丝
9
关注
17
看过 TA
5
男
西北工业大学
2025
算法工程师
IP属地:陕西
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑hpu_hdy吗?
发布(24)
刷题
hpu_hdy
2020-12-16 17:57
已编辑
西北工业大学 计算机类
Codeforces Round #690 (Div. 3)
A:按左右两边依次输出 #include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int a[N]; void solve() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int l = 1, r = n; for (int i = 1; i <= n; i++) if (i % 2 == ...
0
点赞
评论
收藏
转发
hpu_hdy
2020-12-03 21:20
已编辑
西北工业大学 计算机类
Codeforces 687 div2
明天来写最近准备考试,写的不太详细,哪里看不懂直接私信就行。A:这个题直接猜了一下就是求4个点到r,c的距离哪个最大 #include<bits/stdc++.h> using namespace std; int main() { int t; scanf("%d",&t); for(int i=1;i<=t;i++) { int n,m,r,c; scanf("%d%d%d%d",&n,&m,&r,&c); int sum=0; su...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-25 14:13
西北工业大学 计算机类
51 nod 1460 连接小岛
先把两个相邻的最大距离和最小距离求出来,然后转化在把所有的按照最大的从小到大排序,如果最大的相等按照最小的从小到大排序,为什么不按照最小值从小到大排序呢?我们可以想一想。我们需要的是能够满足条件的举个例子 1 20 3 8 4 9 5 9 9 如果我们按照最小值从小到大排序的话应该把5给第一个,但是第二个就无法满足了,但是如果我们把9个第一个的话 5给第二个这样就可以了。所以我们把他们的最大值从小到大排序这样可以找到满足的并且最小的。 #include<bits/stdc++.h> #define fo(i,a,b) for(int i=a;i<=b;i++) using n...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-24 17:18
西北工业大学 计算机类
51 nod 1491 黄金系统
这个题可以找出来规律是q^2=q+1;然后可以把小的往大的合并,不能把f[i]的给f[i-1],f[i-2],应该是存不下,我一开始这样写第19个样例wa了我下载下来对比发现和答案一样,但是不知道为什么显示的wa。这个可以统计每一位的值。如果一个位的不够可以从下两位提上来,如果哪一个abs>=2就说明不管后面怎么补也不可能把他变为0.这样就行了。 #include<bits/stdc++.h> using namespace std; const int N = 3e5+10; typedef long long ll; char A[N]; char B[N]; ll ...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-24 16:11
已编辑
西北工业大学 计算机类
atcoder abc 184 F - Programming Contest
meet-in-the-middle 基础算法(优化dfs)meet−in−the−middle(又称折半搜索、双向搜索)对于n<=40的搜索类型题目,一般都可以采用该算法进行优化,很稳很暴力。我们可以将n分成2部分这样可以将 -> 对于n=40的可以将复杂度降到n*logn左右 n->2^20;然后我们通过dfs将前半段和后半段的所有不大于T的数存起来,在枚举一个的时候,判断另一个。 #include<bits/stdc++.h> #define fo(i,a,b) for(int i=a;i<=b;i++) using namespace std; t...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-23 18:01
西北工业大学 计算机类
51nod 1420 数袋鼠好有趣
这题应该是分类分错了。就不写题解了。。。 #include<bits/stdc++.h> using namespace std; const int N = 5e5+10; int s[N]; multiset<int> st; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&s[i]); } int len=n/2; sort(s+1,s+n+1); for(i...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-23 14:00
西北工业大学 计算机类
51 nod 1557 两个集合
只需要将满足条件的数尽可能的放一个集合里面,然后看有没有不满足的条件发生,注意可能先放A也可能先放B,所以要跑两遍,一边先放A,一边先放B(没注意到这点wa了好多发。) #include<bits/stdc++.h> #define fo(i,a,b) for(int i=a;i<=b;i++) using namespace std; typedef long long ll; typedef double dl; const int N = 1e5+7; const int M = 1e9+7; const int INF = 0x7fffffff; int p[N...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-23 12:43
西北工业大学 计算机类
51 nod 1574 排列转换
对于每一个点,如果他的p[i]=s[i],则不需要移动,如果在p序列中的位置在s序列中的左边,则p需要移动,在移动的过程中对于每一个需要向右移动的就都可以替换。同理向左的时候也是如此 4 4 2 1 3 3 2 4 1 p4在s4的左边,p2不需要移动,p1在s1的左边,p3在s3的右边,最优情况是每次都不进行重复的1<->3交换 4<->3其实我们把路径画出来就可以找到规律。 #include<bits/stdc++.h> #define fo(i,a,b) for(int i=a;i<=b;i++) using namespace std; ty...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-23 10:59
西北工业大学 计算机类
51 nod 1158 全是1的最大子矩阵
可以把问题转化成poj2559的这种问题,然后按照每行去计算。推荐一篇blog链接说明 #include<bits/stdc++.h> #define fo(i,a,b) for(int i=a;i<=b;i++) using namespace std; typedef long long ll; typedef double dl; const int N = 1e5+7; const int M = 1e9+7; const int INF = 0x7fffffff; int n,m; int h[N]; int a[N]; stack<int> s...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-23 09:26
西北工业大学 计算机类
51 nod 1624 取余最长路
假设我们在第一行x处从第一行到第二行,在第二行的y处从第二行到第三行。 sum[1][x]+sum[2][y]-sum[2][x-1]+sum[3][n]-sum[3][y-1];将相同的移动到一边 sum[1][x]-sum[2][x-1]+sum[3][n]-sum[3][y-1]+sum[2][y]对于a+b<p取最大我们可以将a<p-b;在枚举每一个端点y的时候,查找最优的x,因为x<=y,所以我们可以用二分在枚举每一个y的时候将当时的p-x插入。如果能找到就取找到的,不能找到就取容器中最小的。为什么要用p-b呢,因为在查找的时候如果在大于a的情况下,p-b越小则说明...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-20 18:18
已编辑
西北工业大学 计算机类
51 nod 1215 数组的宽度
**题,写线段树的时候懒得写query_min了直接cv的max然后cv错了,找了半天。就只需要找到每个区间最大的值相加减去每个区间最小的相加。然后每一个值他的贡献数是(mid-l+1)*(n-i+1).正解是单调栈(不会写,等会了在补。 #include<bits/stdc++.h> #define fp(i,a,b) for(int i=a;i<=b;i++) typedef long long ll; typedef double dl; using namespace std; const int N=1e5+7; const ll M=1e9+7; const i...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-20 16:14
西北工业大学 计算机类
51 nod 1153 选择子序列
这个题的题意好难说啊,a[b[i]]要从大到小,直接dfs就行了。 #include<bits/stdc++.h> #define fp(i,a,b) for(int i=a;i<=b;i++) typedef long long ll; typedef double dl; using namespace std; const int N=1e5+7; const ll M=1e9+7; const int INF=0x3f3f3f3f; int n,m; int a[N]; int dfs(int l,int r) { if(l == r) return 1...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-20 11:08
西北工业大学 计算机类
51 nod 1682 中位数计数
n数据是8000,O(n^2)复杂度就能过。因为中位数是按从小到大排序后的中间数。所以对一个区间a[l]到a[r]我们只需要小于a[i]和大于a[i]的个数相等就行。所以在查询每个a[i]的时候我们在遍历1-i的时候如果a[i]<a[j]就cnt++,a[i]>a[j]就cnt--,为啥需要cnt--呢,因为这样我们就可以知道左边的区间中小于a[i]的比大于a[i]的有多少,我们在查询右边的时候只需要找到右边大于a[i]的比小于a[i]有多少就行,这样复杂度就是O(n).补充一下:对于偶数个的时候不用特殊去求,因为我们是求得中位数,不管奇偶只要满足上述要求就是符合条件的。 #inc...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-19 18:35
西北工业大学 计算机类
51nod 1255 字典序最小的子序列
单调栈问题遍历一遍字符串,如果s[i]小于栈中的元素并且这个栈顶元素后面还有就将栈顶元素弹出。入栈就将元素标记,如果已经标记过后面遇到vis[s[i]]=1的就continue,因为如果这个时候s[i]元素已经在栈内,说明此时的栈首一定是大于等于s[i]的因为栈顶元素小于s[i],我们在遍历到栈顶元素的时候就会将栈中的s[i]弹出,所以此时的s[i]一定是大于栈首的。 #include<bits/stdc++.h> #define fp(i,a,b) for(int i=a;i<=b;i++) typedef long long ll; typedef double dl; ...
0
点赞
评论
收藏
转发
hpu_hdy
2020-11-18 22:13
西北工业大学 计算机类
51 nod 1449 砝码称重
这个题,我一看!嗷!,原来是一个贪心题,很快啊,我看了看没有思路,队友A了,我大意了啊,没有闪,不然我肯定自己A。队友不讲武德,把我的51nod币用完了。希望队友耗子尾汁,好好反思,以后不要再犯这样的聪明,小聪明。 #include<bits/stdc++.h> #define fp(i,a,b) for(int i=a;i<=b;i++) typedef long long ll; typedef double dl; using namespace std; const int maxn=2e5+7; const ll M=1e9+7; const int INF=0x...
0
点赞
评论
收藏
转发
1
2
工具箱
TA的圈子
暂未加入圈子
TA的圈子
TA的笔记
暂无笔记
TA的笔记
登录
0
天
已登录
0
天
连续登录
0
人
今日访客
牛客网
牛客企业服务