为了应付开学考试摸了两星期,这场小白月赛感觉比较简单,正好适合复建。

A.先交换

题目链接

题意

给一个数组a,每次操作可以交换满足 i < j 且 a[i] > a[j] 的两个数,问经过多少次操作使得a[1] 为奇数。

思路

水题,如果开头不是奇数,往后遍历找一个奇数小于a[1]的,找不到就是-1,找到就是1。开头是奇数直接是0。

Code

#include<bits/stdc++.h>using namespace std;void solve()
{int n;cin >> n;vector<int>a(n + 1);for(int i = 1;i <= n;i ++)cin >> a[i];if(a[1] & 1) cout << 0 << endl;else{for(int i = 2;i <= n;i ++)if(a[i] % 2 == 1 && a[i] < a[1]){cout << 1 << endl;return ;}cout << "-1" << endl;return ;}
}
int main()
{int tt;cin >> tt;while(tt --)solve();}

B.再交换

题目链接

题意

给两个长度为n的十进制数a,b,可以选择i、j,交换ai和bj,ai是从左到右第i个数位,bj同理。问交换一次能否使a<b?

思路

对于两个数,高位第一个不一样的数位就决定了两个数的大小(129****一定大于120****),遍历寻找第一个不一样的数位i,如果有ai > bi,就把该位交换,如果ai < bi,说明已经满足条件a < b,就交换前面任意一位相同的,注意i == 0的特判

Code

#include<bits/stdc++.h>using namespace std;void solve()
{int n;string A,B;cin >> n >> A >> B;for(int i = 0;i < A.size();i ++){if(A[i] == B[i]) continue;if(A[i] > B[i]){cout << i + 1 << " " << i + 1 << endl;return ;}else if(A[i] < B[i]){if(i >= 1) cout << i << " " << i << endl;else cout << i + 2 << " " << i + 2 << endl;return ;}}
}
int main()
{int tt;cin >> tt;while(tt --)solve();
}

C.空洞骑士

题目链接

题意

给一个[0,1e9]的数轴,数轴上有m个吉欧,小骑士会从起点s出发,收集所有吉欧后到达终点t,要求给出一个s和t,使得小骑士采取最优策略的情况下行进距离最长

思路

考虑了两种情况,首先是起点和终点相邻在数轴最边界,这样距离大概是2 * [距起点和终点最远的吉欧的距离]。

第二种是起点在吉欧中间,想着小骑士可以多往返几次,但实际上由于小骑士会采取最优策略,他肯定会先走到离终点最远的吉欧的位置再顺路直接到终点,这样的距离大概是[距起点最远的吉欧距离 + 距终点最远吉欧的距离],显然不如第一种

继续考虑第一种情况,显然发现起点和终点可以取[0,1e9],[0,1],[1e9,1e9 - 1]三种情况,分类讨论一下即可(注意可能多个吉欧位于同一个点)

Code

#include<bits/stdc++.h>using namespace std;void solve()
{int m,flag = 0;cin >> m;vector<int>a(m + 1);for(int i = 1;i <= m;i ++) {cin >> a[i];if(i > 1 && a[i] != a[i - 1])flag = 1;}if(!flag){//cout << "?" << endl;cout << 0 << " " << (int)1e9 << endl;return ;}int MIN = 1e9 + 7,MAX = 0;for(int i = 1;i <= m;i ++){MIN = min(MIN,a[i]);MAX = max(MAX,a[i]);}int info1 = (int)2e9 - 1 - 2 * MIN;int info2 = 2 * MAX - 1;if(info1 >= info2) cout << (int)1e9 << " " << (int)1e9 - 1 << endl;else cout << 0 << " " << 1 << endl;
}
int main()
{
//     int tt;
//     cin >> tt;
//     while(tt --)solve();
}

D.障碍

题目链接

题意

在[0,n]的数轴内有m个障碍,现在可以从中移除多个障碍,称移除的障碍个数为x,称区间[0,n]内最长段长度为L,要求最大化L - 

思路

首先考虑L - ,如果大于L,答案一定不会更优,所以x的最大值实际上只有,接下来考虑暴力枚举。

没想到怎么枚举,看题解学到一个O(n^2)的枚举,第一层枚举第i个障碍,第二层枚举移除了前j个障碍,答案即为a[i] - a[i - j + 1] - j * j,维护一个最大值即可。

注意处理边界问题,可以插入一个a[0] = 0和a[m + 1] = m,直接进行枚举就可以防止边界问题出错。

Code

#include<bits/stdc++.h>using namespace std;void solve()
{int n,m;cin >> n >> m;vector<int>pos(m + 2);for(int i = 1;i <= m;i ++) cin >> pos[i];pos[0] = 0,pos[m + 1] = n;int res = 0;for(int i = 1;i <= m + 1;i ++){for(int j = 0;j <= min(i - 1,(int)sqrt(n));j ++){res = max(res,pos[i] - pos[i - j - 1] - j * j);}}cout << res << endl;
}
int main()
{
//     int tt;
//     cin >> tt;
//     while(tt --)solve();
}

E.生成树与路径

题目链接

题意

给定n,m,构造一个无向带权简单联通图,满足该图的最小生成树边权和等于1~n的最短路长度,同时要求边权为[1,m]的序列。

思路

首先考虑 最小生成树,不难想到最小生成树的边权和为n * (n - 1) / 2,也就是连一条线,边权分别为(1,2,....,n - 1),要想最短路也是这个值,就需要对于1 - 3,2 - 4,3 -5等等边的边权,都小于等于链1-3,2-4等等的边权和。

然后写一写就会发现,就可以发现我们按照两点相差从小到大的顺序分配边权,就可以实现上述效果。

e.g. n = 4,m = 6

w{1,2} = 1,w{2,3} = 2,w{3,4} = 3;

w{1,3} = 4,w{2,4} = 5;

w{1,4} = 6

Code

#include<bits/stdc++.h>using namespace std;void solve()
{int n,m;cin >> n >> m;int cnt = 1;for(int dif = 1;dif <= n - 1;dif ++){for(int j = 1;j + dif <= n;j ++){cout << j << " " << j + dif << " " << cnt ++ << endl;if(cnt > m) break;}if(cnt > m) break;}
}int main()
{int tt;cin >> tt;while(tt --)solve();
}

F.球球大作战

题目链接

题意太长懒得写了

思路

1.首先可以想到,对于ai > aj,如果aj能找到一个合法顺序,那么ai肯定也能找到一个合法顺序。先排序,然后可以二分去找最小的能找到合法顺序的球球。

2.可以注意到每次碰撞后小球一定不会变大,那么当check(ai)时,我们让除了ai的所有球球全都互相碰撞,最后得到的一定是一个最小的球球,如果ai比最小的球球还小,那么就无法找到合法顺序

Code

#include<bits/stdc++.h>using namespace std;
const int maxn = 1e5 + 10;
int n;
pair<int,int> a[maxn];
bool check(int id)
{int temp = (id == n) ? a[n - 1].first : a[n].first;for(int i = n;i >= 1;i --){if(i == id) continue;temp = (temp + a[i].first) / 2;}if(a[id].first >= temp) return true;else return false;
}
int main()
{cin >> n;for(int i = 1;i <= n;i ++) cin >> a[i].first,a[i].second = i;vector<int>vis(n + 1);sort(a + 1,a + 1 + n);int l = 1,r = n;while(l < r){int mid = (l + r) >> 1;if(check(mid)) r = mid;else l = mid + 1;}for(int i = l;i <= n;i ++)vis[a[i].second] = 1;for(int i = 1;i <= n;i ++)if(vis[i]) cout << "1";else cout << "0";cout << endl;
}

牛客小白月赛 66 (A~F)相关推荐

  1. F.孤独(牛客小白月赛39)

    F.孤独(牛客小白月赛39) 题意: 给定一棵树,寻找一个路径,将断掉所有与这个路径上的点相连的边,使得剩下的最大连通块的大小最小 题解: 这题有点印象,感觉做过,至少这个方法肯定遇到过 设dp[u] ...

  2. 牛客小白月赛61 F.选座椅(双指针)

    牛客小白月赛61 F.选座椅(双指针) 显然 ( l , r ) (l,r) (l,r)满足 ( l , r + 1 ) (l,r+1) (l,r+1)满足. 那么可以考虑双指针,枚举 l l l,然 ...

  3. 牛客小白月赛2 F.黑黑白白

    牛客小白月赛2 F.黑黑白白 题目链接 题目描述 艮为山,动静得宜,适可而止:兑为泽,刚内柔外,上下相和. 艮卦:兼山,艮:君子以思不出其位.财帛常打心头走,可惜眼前难到手,不如意时且忍耐,逢着闲事休 ...

  4. 牛客小白月赛60(A~C)题解

    原题地址:牛客小白月赛60_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 题目A:小竹与妈妈 题意:输出(x-b)/a即可,没什么好说 代码: #include< ...

  5. 牛客小白月赛3 C.博弈

    牛客小白月赛3 C.博弈 题目链接 题目描述 XHRlyb 在和 Cwbc 玩游戏. 在一个多重集合中有在 [l,r] 中的全部整数各一个,即 l,l+1,l+2,......,rl,l+1,l+2, ...

  6. F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分,2021济南ICPC- K Search For Mafuyu (pintia.cn) dfs

    F-选座椅_牛客小白月赛61 (nowcoder.com) 双指针,差分 如果区间[l,r]满足所有条件,那么包含[l,r]的区间也一定是满足条件的,那就考虑双指针遍历每一个区间,如果当前区间满足条件 ...

  7. 2021牛客小白月赛39

    2021牛客小白月赛39(A+B+C+E+G+H) A.憧憬 B.欢欣 C.奋发 D.绝望 E.迷惘 F.孤独 G.冷静 H.终别 A.憧憬 题目链接:https://ac.nowcoder.com/ ...

  8. 牛客小白月赛1 I.あなたの蛙が帰っています

    牛客小白月赛1 I.あなたの蛙が帰っています 题目链接 题目描述 あなたの蛙が帰っています! 蛙蛙完成了一趟旅行,回家啦!但它还是没有去它心中非常想去的几个地方.总共有 N 个它 想去的目的地.蛙蛙下 ...

  9. 牛客小白月赛73F Kevin的哈希构造

    原题链接:F-Kevin的哈希构造_牛客小白月赛73 (nowcoder.com)​​​​​ dp[i][j][k] : 前i位,相同字符个数为j,哈希值为k,表示的状态为0.1,0表示不可行,1表示 ...

最新文章

  1. Data - 深入浅出学统计 - 下篇
  2. Python pip安装命令
  3. Interview:算法岗位面试—10.10下午—上海某银行算法岗位(偏数据分析,四大行之一)的技术面—关于项目的考察
  4. latex换页_备忘 | Latex 双栏模式下表格太长怎么办?
  5. SpringBoot 中 4 大核心组件,你了解多少?
  6. Silverlight 国外技术文章
  7. [Java] 蓝桥杯ADV-91 算法提高 素数判断
  8. 动态规划—最长公共子序列LCS及模板
  9. 1分钟教你搞定apk签名!!!
  10. python | 高效统计语言模型kenlm:新词发现、分词、智能纠错
  11. mysql 年龄计算(根据生日字段)
  12. EAN13条形码生成器(C++)
  13. 《电子商务概论》刘宏,PPT总结成Word
  14. python pytz_python – 找不到符合要求pytz的版本
  15. CSDN公式插入——关于对数
  16. 如何找到人生方向目标?
  17. python3实现网络爬虫(4)--BeautifulSoup使用(3)
  18. 华为魔术2手机拆机图解_荣耀Magic2做工如何?荣耀Magic2拆解图解评测 (全文)
  19. 【网络协议】转载:关于TCP与UDP的接收recv和recvfrom
  20. 微信支付结算费率怎么降低至0.2~0.35操作方法

热门文章

  1. 我不是刚说了么 为什么你不知道
  2. iPhone14卫星通信实测:发条短信平均3-5分钟,没点耐心真不行
  3. 如何设计主图能提升点击率?
  4. MAC 安装安卓模拟器
  5. Echarts柱状图和折线图动态轮播展示
  6. 吴恩达深度学习笔记course3 week2 测验
  7. 项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】...
  8. 谷歌浏览器调试工具比较令人兴奋的实用操作(一定有你不知道的)
  9. [乐意黎原创] 红米1刷MIUI 6 系统
  10. 安卓沉浸式状态栏适配底部导航虚拟按键