The 19th Zhejiang Provincial Collegiate Programming Contest(部分题解)
在完成三道签到之后,分别对图论、前缀&二分、大模拟上面取得突破点,但其他题集没能得到突破,仍需多加练习。
A - JB热爱数学
【题意】
给定两个数 a、b。求出让a变成b的最少次数。
能修改a的值为加上一个奇数 和 减去一个偶数。
【类型】
思维题,分析各种情况
【分析】
(1)当a=b时;直接输出0;
(2)当a>b时,且a-b是偶数,输出1,或a-b是奇数,输出2;
(3)当a<b时,如果b-a是奇数,直接输出1;如果且b-a是偶数,则需要判断差值是偶数2,输出3,还是奇数2,输出2;
【时间复杂度&&优化】
O(n)
【数据】
input
2
3 6
5 3
output
1
1
AC代码:
#include<iostream>
using namespace std;
int main()
{int n;cin>>n;while(n--){int a,b;cin>>a>>b;if(a==b)cout<<0<<endl;else if(a>b){if((a-b)%2==0)cout<<1<<endl;elsecout<<2<<endl;}else if(a<b){if((b-a)%2==0){if((b-a)/2&1)cout<<2<<endl;elsecout<<3<<endl;}elsecout<<1<<endl;}}
}
B- JB Loves Comma
【题意】
在给出来的字符串,找出连续的‘cjb’子串,并在这些子串后面添加‘,’
【类型】
签到题、直接遍历
【分析】
初步遍历,在找到连续的‘cjb’的后面输出‘,’即可。
【时间复杂度&&优化】
O(n)
【数据】
Standard input
pbpbppb cjbismyson
Standard output
pbpbppb cjb,ismyson
【代码】
#include<iostream>
using namespace std;
int main() {string c;while(cin>>c) {for(int i=0; i<c.length(); i++) {if(c[i-2]=='c'&&c[i-1]=='j'&&c[i]=='b') {cout<<c[i]<<",";} elsecout<<c[i];}cout<<endl;}return 0;
}
C - JB Wants to Earn Big Money
【题意】
给出两组数,求第一组数大于等于k与第二组数小于等于k、的个数和。
【类型】
签到题
【分析】
水题无解释
【时间复杂度】
O(n)
【数据】
input
5 5 3
1 2 3 4 5
1 2 3 4 5
output
6
【代码】
#include <bits/stdc++.h>
using namespace std;
int main() {int n, m, k, ans = 0, d;cin >> n >> m >> k;for (int i(1); i <= n; i++) cin >> d, ans += d >= k;for (int i(1); i <= m; i++) cin >> d, ans += d <= k;cout << ans;
}
G- Easy Glide
【题意】
给出起点和终点,给出多个加速点坐标,求到达终点最短时间
【类型】
无向图最短路
【分析】
求路程的最短时间,还是变速运动,乍一看感觉很难,实际上仔细想想,可以直接以起点,终点,所有加速点中,两两互相到达的时间建图。节点对应每个加速点,起点终点,权值便是到达的时间。这样看来原题的最短时间便是此图的最短路。此题化为基础最短路问题,不过多解释,迪杰斯特拉即可
【时间复杂度】
O(n2)
【数据】
input
2
2 1
0 3
0 0 4 0
10 11
output
0.400000000000
【代码】
#include<bits/stdc++.h>using namespace std;
double mp[1005][1005], dis[1005];
long long x[1005], y[1005], n, a1, b1, a2, b2, v1, v2;
bool f[1005];double distance(long long a1, long long b1, long long a2, long long b2) {return sqrt(double((a1 - a2) * (a1 - a2) + (b1 - b2) * (b1 - b2)));
}signed main() {cin >> n, n += 2;for (int i = 2; i < n; i++) cin >> x[i] >> y[i];cin >> a1 >> b1 >> a2 >> b2 >> v1 >> v2;mp[1][n] = distance(a1, b1, a2, b2) * 1.0 / (v1 * 1.0);for (int i = 2; i < n; i++) mp[1][i] = distance(a1, b1, x[i], y[i]) / (v1 * 1.0);for (int i = 2; i < n; i++) {double k = distance(x[i], y[i], a2, b2);mp[i][n] = k / (v2 * 1.0) <= 3 ? k / (v2 * 1.0) : 3.0 + (k - v2 * 3.0) / (v1 * 1.0);}for (int i = 2; i < n; i++)for (int j = 2; j < n; j++) {if (i == j) continue;double k = distance(x[i], y[i], x[j], y[j]);mp[i][j] = k / (v2 * 1.0) <= 3 ? k / (v2 * 1.0) : 3.0 + (k - v2 * 3.0) / (v1 * 1.0);}for (int i = 1; i <= n; i++) dis[i] = 1e18;dis[1] = 0;for (int i = 0, t = -1; i < n; i++, t = -1) {for (int j = 1; j <= n; j++) if (!f[j] && (t == -1 || dis[t] > dis[j])) t = j;f[t] = true;for (int j = 1; j <= n; j++) if (dis[t] + mp[t][j] < dis[j])dis[j] = dis[t] + mp[t][j];}printf("%.12lf", dis[n]);
}
L - Candy Machine
【题意】
给定一系类数组,求所有子集中的一个子集中满足严格大于这个子集的平均数的元素个数的最大值
【类型】
前缀和 二分查找
【分析】
题目要求见题意
可以先将这个数组从小到大排序,然后依次比较每次去掉最大的一个元素之后的结果,符合条件所得的ans的最大值为所求。
因为如果每次去掉的是最小的数组元素的话,所得数组的平均值会变大,最后该数组中能满足严格大于这个数组的平均值的元素个数就会变小;反之,平均值会变小,结果就会有变大的可能性。所以每次比较要去掉最大的数。
【时间复杂度&&优化】
O(n*log(n))
【数据】
Input
5 1 2 3 4 5
Output
2
【代码】
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a[1000060];
int main() {std::ios::sync_with_stdio(false);ll n;cin>>n;ll sum=0,ans=0;for(ll i=0; i<n; i++) {cin>>a[i];sum+=a[i];}sort(a,a+n);double aver=sum*1.0/n;for(ll i=0; i<n; i++) {if((double)a[i]>aver)ans++;}for(ll i=n-1; i>=1; i--) {sum-=a[i];aver=sum*1.0/(i)*1.0;ll x=upper_bound(a,a+i-1,aver)-a;ans=max(ans,i-x);}cout<<ans<<endl;return 0;
}
M - BpbBppbpBB
【题意】
给定两种邮票来组成图形,我们把图形给你问你用了两种邮票各自多少种
【类型】
大模拟题
【分析】
仔细观察邮票的种类,发现如果按照空洞去找规律有这么个规律
按照左上角的原点来代表空洞的话,空洞之间7步之内能到达则是第一种邮票,否则是第二种邮票,先考虑第一种邮票。
【时间复杂度&&优化】
O(n*n)<t<O(n^3)
【数据】
input 1
10 17
#################
#################
#################
####..#####..####
###....###....###
###....###....###
####..#####..####
#################
#################
#################
output 1
1 0
input 2
14 11
.##########
.##########
.##########
.####..####
.###....###
.###....###
.####..####
.##########
.##########
.##########
.###.......
.###.......
.###.......
.###.......
output 1
0 1
input 1
20 14
.##########...
.##########...
.##########...
.####..####...
.###....###...
.###....###...
.####..####...
.##########...
.##########...
.##########...
.#############
.#############
.#############
.#######..####
....###....###
....###....###
....####..####
##############
##############
##############
output 1
0 2
【代码】
#include<bits/stdc++.h>#define ll long long
using namespace std;
ll n, m, vis[1005][1005], dx[4] = {0, 0, 7, -7}, dy[4] = {7, -7, 0, 0}, b, p;
char mp[1005][1005];
int sadda;
bool check(ll x, ll y) {for (int i(x); i <= x + 3; i++) {if (mp[i][y] != '.' || mp[i][y + 1] != '.') return false;if (i >= x + 1 && i <= x + 2) {if (mp[i][y - 1] != '.' || mp[i][y + 2] != '.') return false;if (mp[i][y - 2] == '.' || mp[i][y + 3] == '.') return false;} else if (mp[i][y - 1] == '.' || mp[i][y + 2] == '.') return false;}return true;
}void mark(ll x, ll y) {for (int i(x); i <= x + 3; i++) {vis[i][y] = vis[i][y + 1] = 1;if (i >= x + 1 && i <= x + 2) vis[i][y - 1] = vis[i][y + 2] = 1;}
}int main() {scanf("%lld %lld", &n, &m);for (int i(1); i <= n; i++) scanf("%s", mp[i] + 1);for (int i(1); i <= n; i++)for (int j(1); j <= m; j++)if (mp[i][j] == '.' && !vis[i][j] && check(i, j)) mark(i, j), vis[i][j] = 2;for (int i = 1; i <= n; i++)for (int j = 1, k; j <= m; j++) {if (mp[i][j] == '.' && vis[i][j] == 2) {for (k = 0; k < 4; k++) {if (i + dx[k] >= 1 && i + dx[k] <= n && j + dy[k] >= 1 && j + dy[k] <= m &&vis[i + dx[k]][j + dy[k]] == 2) {b++, vis[i][j] = vis[i + dx[k]][j + dy[k]] = 1;break;}}if (k == 4) p++, vis[i][j] = 1;}}printf("%lld %lld\n", b, p);
}
The 19th Zhejiang Provincial Collegiate Programming Contest(部分题解)相关推荐
- The 19th Zhejiang Provincial Collegiate Programming Contest
文章目录 [A.JB Loves Math](https://codeforces.com/gym/103687/problem/A) [B.JB Loves Comma](https://codef ...
- The 19th Zhejiang Provincial Collegiate Programming Contest 2022浙江省赛 (A/B/C/G/L/I)
https://codeforces.com/gym/103687 题解在cf旁边的Tutorial那里 A - JB Loves Math 本来是按照数的奇偶分类讨论,一直wa2,跑了个对拍 如果错 ...
- The 18th Zhejiang Provincial Collegiate Programming Contest部分题解(A,C,G,J,L,M)
A. League of Legends Codeforces 题意 签到题 C. Cube Codeforces 题意 给出 888 个点,判断这 888 个点是否组成一个正方体. 题解 888 个 ...
- The 16th Heilongjiang Provincial Collegiate Programming Contest部分题解
The 16th Heilongjiang Provincial Collegiate Programming Contest 目录 D - Doin' Time 题目思路 题目代码 F - Func ...
- 2019 浙江省赛部分题解(The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple)
签到题 GLucky 7 in the Pocket Time Limit: 1 Second Memory Limit: 65536 KB BaoBao loves number 7 bu ...
- The 16th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple
Problem A Vertices in the Pocket 比赛地址:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?proble ...
- The 12th Zhejiang Provincial Collegiate Programming Contest - I Earthstone Keeper浙江省赛
题目:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5501 思路:DFS,用了递归就溢出,所以可能得用非递归的. ...
- 【ZJCPC2018 第15届 浙江省赛】The 15th Zhejiang Provincial Collegiate Programming Contest(MABLJK 6题)
补题地址:https://zoj.pintia.cn/home/news 搜索15th 本文按照通过率补的题 M. Lucky 7 题意:如果存在从给出的长为n的序列中选择一个数+b 可以被7整除,就 ...
- 【ZJCPC2019 第16届 浙江省赛】The 16th Zhejiang Provincial Collegiate Programming Contest(GFHIJ 5题)
补题地址:https://zoj.pintia.cn/home/news 搜索16th 本文按照通过率补的题 G .Lucky 7 in the Pocket 题意:给出T个数,对于每个数,找出一个能 ...
最新文章
- 资深程序员的笔记:工作多年对于编程语言的理解,新手建议了解!
- Ansible 之 用户管理
- 路由器用PPP0E上网
- mysql正删改查返回值_MySQL增删改查
- wtc java 代码 tpcall(servicename_通过wtc使tuxedo及weblogic通信开发.doc
- ***mysql 用一个表的一列,去更新另一表的一列
- java飞机大战开始游戏按钮素材_飞机大战图片素材(全)
- Win10下连接树莓派ZeroW(附win10虚拟网卡驱动下载)
- thinkPHP框架
- pythonapp爬虫库_GitHub - LJF2402901363/JobSearchApp: 基于Python的flask网络爬虫web项目
- javaScript-力扣-题库-11. 盛最多水的容器
- 苹果可穿戴设备项目背后的那些专家
- 南方科技大学计算机系图灵班,【独家】上了大学就自由了,老师管得少! 这所高校:喔?是吗?...
- grbl学习之旅---开始
- vant中遍历本地图片路径写法
- visibility
- Linux-Samba文件共享服务
- PHP:Maze迷宫寻址算法(附完整源码)
- 【C语言作业7】二分法猜数游戏:先由计算机“想”一个1~100之间的数请人猜,用二分法进行猜数,计算机给出反馈,猜大额或是猜小了,直到人猜对为止。计算机记录猜的次数,以此反映猜的水平。
- oracle库函数,Oracle:函数目录