Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)
A、B都是暴力搞一搞。
A:
1 #include<bits/stdc++.h> 2 #define fi first 3 #define se second 4 #define mk make_pair 5 #define pii pair<int,int> 6 #define read(x) scanf("%d",&x) 7 #define sread(x) scanf("%s",x) 8 #define dread(x) scanf("%lf",&x) 9 #define lread(x) scanf("%lld",&x) 10 using namespace std; 11 12 typedef long long ll; 13 const int inf=0x3f3f3f3f; 14 const int INF=0x3f3f3f3f3f3f3f3f; 15 const int N=1e6+7; 16 const int M=2333; 17 18 ll w[1001]; 19 int a,b; 20 int main() 21 { 22 for(int i=1;i<=1000;i++) 23 w[i]=w[i-1]+i; 24 read(a);read(b); 25 if(a>b) 26 swap(a,b); 27 ll ans=INF; 28 for(int i=a;i<=b;i++) 29 { 30 ans=min(ans,w[i-a]+w[b-i]); 31 } 32 printf("%lld\n",ans); 33 return 0; 34 } 35 /* 36 */
View Code
B:
#include<bits/stdc++.h> #define fi first #define se second #define mk make_pair #define pii pair<int,int> #define read(x) scanf("%d",&x) #define sread(x) scanf("%s",x) #define dread(x) scanf("%lf",&x) #define lread(x) scanf("%lld",&x) using namespace std;typedef long long ll; const int inf=0x3f3f3f3f; const int INF=0x3f3f3f3f3f3f3f3f; const int N=1e6+7; const int M=2333;ll w[1001]; int n,a,b; vector<int> v[20]; int main() {read(n);read(a); read(b);for(int i=1;i<=n;i++)v[0].push_back(i);for(int i=0;i<=n;i++){if(v[i].size()==2)break;for(int j=0;j<v[i].size();j+=2){if(v[i][j]==a && v[i][j^1]==b || v[i][j]==b && v[i][j^1]==a){printf("%d\n",i+1);return 0;}if(v[i][j^1]==a || v[i][j^1]==b)v[i+1].push_back(v[i][j^1]);elsev[i+1].push_back(v[i][j]);}}puts("Final!"); } /* */
View Code
C题:刚开始没看到给你的数据差值不小于等于2,感觉不会写,看到了啪啦啪啦写完啦。
1 #include<bits/stdc++.h> 2 #define fi first 3 #define se second 4 #define mk make_pair 5 #define pii pair<int,int> 6 #define read(x) scanf("%d",&x) 7 #define sread(x) scanf("%s",x) 8 #define dread(x) scanf("%lf",&x) 9 #define lread(x) scanf("%lld",&x) 10 using namespace std; 11 12 typedef long long ll; 13 const int inf=0x3f3f3f3f; 14 const int INF=0x3f3f3f3f3f3f3f3f; 15 const int N=1e6+7; 16 const int M=2333; 17 18 int n,a[N],mn,cnt[100],ans[100]; 19 int main() 20 { 21 int mn=inf; 22 read(n); 23 for(int i=1;i<=n;i++) 24 read(a[i]),mn=min(mn,a[i]); 25 for(int i=1;i<=n;i++) 26 a[i]-=mn; 27 int sum=0; 28 for(int i=1;i<=n;i++) 29 cnt[a[i]]++,ans[a[i]]++; 30 if(!cnt[1] && !cnt[2] || cnt[1] && !cnt[2]) 31 { 32 printf("%d\n",n); 33 for(int i=1;i<=n;i++) 34 printf("%d ",a[i]+mn); 35 puts(""); 36 } 37 else 38 { 39 int ret=min(cnt[0],cnt[2]); 40 int res=(cnt[1]/2)*2; 41 //printf("%d %d\n",ret,res); 42 if(2*ret>=res) 43 { 44 printf("%d\n",n-2*ret); 45 ans[0]-=ret; 46 ans[2]-=ret; 47 ans[1]+=2*ret; 48 49 } 50 else 51 { 52 ans[0]+=res/2; 53 ans[1]-=res; 54 ans[2]+=res/2; 55 printf("%d\n",n-res); 56 } 57 for(int i=0;i<=2;i++) 58 for(int j=1;j<=ans[i];j++) 59 printf("%d ",i+mn); 60 puts(""); 61 } 62 return 0; 63 } 64 /* 65 */
View Code
D题:是我写过最简单的D题,dfs计算一下每个深度的点有多少个,对于每个深度来说如果是奇数个点贡献是1,偶数个贡献是0。
1 #include<bits/stdc++.h> 2 #define fi first 3 #define se second 4 #define mk make_pair 5 #define pii pair<int,int> 6 #define read(x) scanf("%d",&x) 7 #define sread(x) scanf("%s",x) 8 #define dread(x) scanf("%lf",&x) 9 #define lread(x) scanf("%lld",&x) 10 using namespace std; 11 12 typedef long long ll; 13 const int inf=0x3f3f3f3f; 14 const int INF=0x3f3f3f3f3f3f3f3f; 15 const int N=1e6+7; 16 const int M=2333; 17 18 vector<int> edge[N]; 19 int n,d[N]; 20 void dfs(int u,int de) 21 { 22 d[de]++; 23 for(int v:edge[u]) 24 dfs(v,de+1); 25 } 26 int main() 27 { 28 read(n); 29 for(int i=2;i<=n;i++) 30 { 31 int fa; read(fa); 32 edge[fa].push_back(i); 33 } 34 dfs(1,1); 35 int ans=0; 36 for(int i=1;i<=n;i++) 37 if(d[i]&1) 38 ans++; 39 printf("%d\n",ans); 40 return 0; 41 } 42 /* 43 */
View Code
E题:比赛的时候一直看错题,以为是猜对的概率,题目是唯一确定答案的概率,一直调都不对,结果GG啦,其实也很简单,
统计一下点与点之间的情况,对于一种字符来说,第二张要翻开的卡的位置都是一样的,算一下这个概率就好啦。
#include<bits/stdc++.h> #define fi first #define se second #define mk make_pair #define pii pair<int,int> #define read(x) scanf("%d",&x) #define sread(x) scanf("%s",x) #define dread(x) scanf("%lf",&x) #define lread(x) scanf("%lld",&x) using namespace std;const int N=5007; int n,cnt[26][26][N]; char s[N]; double mp[26]; int main() {sread(s+1);n=strlen(s+1);for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){cnt[s[i]-'a'][s[j]-'a'][j-i]++;cnt[s[j]-'a'][s[i]-'a'][n-(j-i)]++;}}for(int i=0;i<26;i++){for(int k=1;k<n;k++){int tot=0,sum=0;for(int j=0;j<26;j++){sum+=cnt[i][j][k];if(cnt[i][j][k]==1)tot++;}mp[i]=max(mp[i],1.0*tot/sum);}}double ans=0;for(int i=1;i<=n;i++)ans+=mp[s[i]-'a']/n;printf("%.12f\n",ans);return 0; } /* */
View Code
F题:题目大意:给你n条线段覆盖的x轴,范围在1-m之间,有一个人开始询问,每次询问一个点的覆盖次数,问你最多几次之后
还是无法确定是不是有一个点被所有线段覆盖。
思路:这题想了好久。。。 刚开始以为是和点被覆盖最大值有关,写了很久发现有问题,我们考虑对于两个点a,b来说,如果有一个
点c在a,b之间,且c < max (a, b) ,那么覆盖a的线段,和覆盖b的线段肯定不完全相同,如果完全相同,肯定有 c>=max(a,b),矛盾。
所以我们的问题就变成了从里面选出尽可能多的点,使其的覆盖次数满足先增后减,然后就很开心地最长不下降子序列搞一搞就好啦。
1 #include<bits/stdc++.h> 2 #define fi first 3 #define se second 4 #define mk make_pair 5 #define pii pair<int,int> 6 #define read(x) scanf("%d",&x) 7 #define sread(x) scanf("%s",x) 8 #define dread(x) scanf("%lf",&x) 9 #define lread(x) scanf("%lld",&x) 10 using namespace std; 11 12 const int N=1e5+5;; 13 int in[N],out[N],cnt[N],d[N],ans1[N],ans2[N]; 14 int n,m; 15 int main() 16 { 17 read(n); read(m); 18 for(int i=1;i<=n;i++) 19 { 20 int l,r; 21 read(l); read(r); 22 in[l]++; 23 out[r]++; 24 } 25 int all=0; 26 for(int i=1;i<=m;i++) 27 { 28 all+=in[i]; 29 cnt[i]=all; 30 all-=out[i]; 31 } 32 ans1[1]=1; 33 34 d[1]=cnt[1]; 35 int len=1; 36 for(int i=2;i<=m;i++) 37 { 38 if(cnt[i]>=d[len]) 39 { 40 d[++len]=cnt[i]; 41 ans1[i]=len; 42 } 43 else 44 { 45 int j=upper_bound(d+1,d+len+1,cnt[i])-d; 46 ans1[i]=j; 47 d[j]=cnt[i]; 48 } 49 } 50 ans2[m]=1; 51 d[1]=cnt[m]; 52 len=1; 53 for(int i=m-1;i>=1;i--) 54 { 55 if(cnt[i]>=d[len]) 56 { 57 d[++len]=cnt[i]; 58 ans2[i]=len; 59 } 60 else 61 { 62 int j=upper_bound(d+1,d+len+1,cnt[i])-d; 63 ans2[i]=j; 64 d[j]=cnt[i]; 65 } 66 } 67 int ans=0; 68 for(int i=1;i<=m;i++) 69 ans=max(ans,ans1[i]+ans2[i]-1); 70 printf("%d\n",ans); 71 return 0; 72 } 73 /* 74 */
View Code
转载于:https://www.cnblogs.com/CJLHY/p/8510160.html
Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)相关推荐
- Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) 题解
文章目录 A. Prison Break B. Restore Modulo C. Basic Diplomacy D. Playlist E. Skyline Photo F. Useful Edg ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)【A、B、C题】
A. Contest for Robots 签到题,注意特判即可. #include <bits/stdc++.h> using namespace std; const int N=11 ...
- Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
一场挺简单的CF,但是我打炸了啊 A. Search for Pretty Integers time limit per test 1 second memory limit per test 25 ...
- Codeforces Round #709 (Div. 1, based on Technocup 2021 Final Round) A. Basic Diplomacy
传送门 文章目录 题意: 思路: 题意: 有nnn个小朋友,让后你要在mmm天中每天都选择一个小朋友,给出这mmm天都可以选哪个小朋友,每个小朋友选的次数不超过⌈m2⌉\left \lceil \fr ...
- Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...
传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...
- szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告
A. Math Problem 题目大意:就是给你n个线段,你自己再添加一个线段d使得d和所有的线段都有交点,求d这个线段的最小长度是多少 解题思路: 1.首先看d线段的左端点,就是左端点选取的是所有 ...
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造
传送门 文章目录 题意: 思路: 题意: 给nnn个数,让你构造一个尽可能大的矩阵,其中每个点所在的行和列都不含相等元素. 思路: 假设构造的答案矩阵大小为a×ba×ba×b且a<=ba< ...
- Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维
传送门 文章目录 题意: 思路: 题意: 给一张图,求必须经过aaa点和bbb点的路径条数. 思路: 通过观察我们发现,这个路径无非就是x−>a−>b−>yx->a->b ...
- Codeforces Round #759 (Div. 2, based on Technocup 2022 Elimination Round 3)
感觉E思路明确只用了stl+树状数组,F线段树复合修改,为什么都是2400. A. Life of a Flower B. Array Eversion C. Minimize Distance E. ...
- Codeforces Round #403 (Div. 1, based on Technocup 2017 Finals)
Div1单场我从来就没上过分,这场又剧毒,半天才打出B,C挂了好几次最后还FST了,回紫了. AC:AB Rank:340 Rating:2204-71->2133 Div2.B.The Mee ...
最新文章
- LUA表与函数的深入理解
- 如何下载防盗链的歌曲?
- flutter图片点击跳转_Flutter系列之Platform Channel使用详解
- HTML如何设置音频播放器控件的大小
- pandas—pandas.DataFrame.query与pandas.DataFrame.reset_index
- 633. 平方数之和
- 数据库系统基础教程(1)数据库系统世界
- ubuntu18.04 登录不了百度云盘
- matlab plot 折线变曲线
- 设置新版谷歌浏览器自动启用flash
- indexOf的用法
- CSS Bulma 框架
- oracle语法基础
- java广度优先爬虫示例_广度优先搜索与网络爬虫
- helm开发环境部署gitea
- D. Nearest Excluded Points(cf)坐标反向BFS
- 嵌入式工程师之数据结构
- medium_socnet靶场
- mkdir -p的用法
- 什么属于配对数据,什么属于非配对数据
热门文章
- 如何在 Mac 上卸载 Chrome?
- 红警 for Mac合集(Red Alert红色警戒)
- SwitchResX Mac屏幕分辨率调整工具
- Wondershare Recoverit for Mac(数据恢复套件)
- JavaScript性能优化之加载与执行
- 这个教授的观点颇犀利
- POJ-1087 A Plug for UNIX 网络流
- yarn-cluster 和yarn-client区别
- 解决问题--mysql可以远程通过IP访问,不能通过localhost与127.0.0.1访问
- 5 张图带你搞懂容器网络的工作原理