Codeforces Round #788 (Div. 2)题解
A-
题目大意:给定一个序列,能够交换任意两个数的正负性,问能否构造出不递减
方法: 负数必须是连续出现在前段,正数连续出现在后段。即构造出的序列是先负数后正数。
代码:
#include<iostream>using namespace std;const int N=100010;
int p[N];int main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t;cin>>t;while(t--){int n;cin>>n; int cntn=0;for(int i=1;i<=n;i++){int x;cin>>x;p[i]=abs(x);if(x<0)cntn++;}bool flag=true;for(int i=1;i<=n;i++){if(cntn){cntn--;p[i]=-p[i];}if(i-1){if(p[i-1]>p[i]){flag=false;break;}}}if(flag){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}
B-
题目大意:给定一个小写字母序列,再给若干个特殊的字母,每次操作,可以将序列中特殊字母的前一个字母删除。问删到不能删的时候,操作了几次
方法: 对于序列中出现的第一个特殊字母,它的操作数是前面的字母数;
对于前有特殊字母的特殊字母,它的操作数是(1+特殊字母之间的字母数)
这个1是当删到特殊字母连续的时候,删一次就可以使开端只剩一个特殊字母。
然后将所有操作数取最大值
代码:
#include<iostream>
#include<cstring>
#include<vector>using namespace std;const int N=200010;
char a[N];
bool st[26];
int main()
{int t;cin>>t;while(t--){memset(st,false,sizeof st);vector<int> ans;int n;cin>>n;cin>>a+1;int k;cin>>k;for(int i=1;i<=k;i++){char c;cin>>c;st[c-'a']=true;}int cnt1=0;int cnt2=0;for(int i=1;i<=n;i++){if(st[a[i]-'a']){ans.push_back(cnt1+cnt2);cnt2=1;cnt1=0;}else{cnt1++;}}int res=0;for(auto x:ans){res=max(res,x);}cout<<res<<endl;}return 0;
}
C-
题目大意:给定2个全排列a,b。 再给一个需要构造的全排列c。
c[i]不是0:c[i]要么为a[i]要么为b[i],
c[i]是0,那么就可以任取a[i]或b[i]。
现在问能构造符合条件的全排列c的数字。
方法: 对于确定值的c[i],不用考虑。不确定的就话,如果可以使对应所有的a[i],b[i]成一个圈,那么就有两种情况,即答案乘2。
注意:如果对于任选的a[i],b[i](c!=0)在确定的a[i],b[i](c==0)出现过,说明不能任选,那么就构不成一个圈。
代码:
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
const int N=100010;
const int mod=1e9+7;
typedef pair<int,int> PII;
int a[N],b[N];
int p[N];
bool st[N];
bool v[N];int main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int t;cin>>t;while(t--){memset(v,false,sizeof v);memset(st,false,sizeof st);int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){cin>>b[i];}for(int i=1;i<=n;i++){int c;cin>>c;if(c){st[a[i]]=true;st[b[i]]=true;}}for(int i=1;i<=n;i++){p[a[i]]=b[i];}long long res=1;for(int i=1;i<=n;i++){if(!v[i]){int j=i;int cnt=0;bool flag=false;while(!v[j]){v[j]=true;flag|=st[j];j=p[j];cnt++;}if(cnt!=1&&!flag){res*=2;res%=mod;}}}cout<<res<<endl;}return 0;
}
D-
题目大意:给定一个无限大的六边形网格区域(蜂窝吗),每次可以画一条直线。
直线有三种情况:与x轴平行,夹60°,夹120°
这些直线相互之间和网格之间可以形成等边三角形。
现给定得到的三角形数量,问最少画了多少根直线
方法: 规律:每次加一根直线,最多可以增加另外两种直线数量和的二倍。
预处理出直线数所能构造出的最多三角形数。
然后二分。
代码:
代码1:找到规律后发现每一轮(加三根不同直线)会多产生12个三角形。
#include<iostream>
using namespace std;int main()
{long long res=0;long long temp=0;for(int i=0;res<=1e9;i++){cout<<i<<" "<<3*i<<" "<<res<<endl;temp+=12;res+=temp;}//12909 38727 999853686return 0;
}
代码2:
#include<iostream>
#include<cstring>
#include<cstdio>using namespace std;
const int N=40000;
int res[N];
int main()
{int t;cin>>t;res[1]=0;res[2]=2;res[3]=6;int cnt[3]={1,1,1};for(int i=4;i<=38730;i++){int j=i%3;int temp=0;for(int k=0;k<3;k++){if(k!=j){temp+=cnt[k]*2;}}cnt[j]++;res[i]=res[i-1]+temp;}while(t--){int n;cin>>n;int l=1,r=38730;while(l<r){int mid=l+r>>1;if(res[mid]>=n){r=mid;}else{l=mid+1;}}cout<<r<<endl;}return 0;
}
E-
题目大意:一颗有n个点的树,边和点都有权值,是[1,2n-1]的全排列,找到一个根节点,使从根节点开始最大路径值最小。
方法: 参考于https://zhuanlan.zhihu.com/p/510465004
讲的挺好的,是大佬%%%%
Codeforces Round #788 (Div. 2)题解相关推荐
- Codeforces Round #514 (Div. 2)题解
Codeforces Round #514 (Div. 2)题解 A 喵,直接模拟. B 枚举所有盖章时的,合法的,左上角的位置.能盖的话就盖一下.最后check一下图案是否相等即可 C 一轮一轮的扔 ...
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- 【算法题解】Codeforces Round #817 (Div. 4)题解
文章目录 Codeforces Round #817 (Div. 4)题解 A. Spell Check B. Colourblindness C. Word Game D. Line E. Coun ...
- Codeforces Round #747 (Div. 2)题解
Codeforces Round #747 (Div. 2)题解 (本博客将持续更新以后每场CF div2的题解,喜欢ACM.OI的小伙伴记得点个关注哟) 昨天夜晚刷网络流刷入迷了,渐渐就忘记了我还要 ...
- Codeforces Round #789 (Div. 2)题解
Codeforces Round #789 (Div. 2)题解 A. Tokitsukaze and All Zero Sequence 原题链接 算法标签 贪心 排序 思路 情况一:数组存在零 → ...
- Codeforces Round #788 (Div. 2) A B C D E
Codeforces Round #788 (Div. 2) A B C D E 打的好 ** 烂总结一下把. A.Prof. Slim 解法: 贪心,统计正负符号,因为每个位上的数只能是其绝对值的正 ...
- Codeforces Round #748 (Div. 3) 题解 完整A~G
Codeforces Round #748 (Div. 3) 题解 A. Elections 题意 已知竞选中三个候选人的当前得票数 a , b , c a,b,c a,b,c,现在可以增加任何一个人 ...
- Codeforces Round #533 (Div. 2)题解
link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...
- Codeforces Round #734 (Div. 3) 题解
Hello大家好,今天给大家带来的是 Codeforces Round #734 (Div. 3) 的全题目讲解. 本文链接:https://www.lanqiao.cn/questions/2040 ...
最新文章
- 微服务之API网关接口设计
- 服务器系统策略功能,设置服务器系统口令复杂度策略
- opencv resize (C/C++/Python)
- Swift - 使用CollectionView实现图片Gallery画廊效果(左右滑动浏览图片)
- 机房收费系统--准备工作
- 没有可用软件包 jenkins。_Jenkins分布式构建与并行构建
- SpringMVC框架使用注解执行定时任务
- 把python37添加到环境变量配置_linux设置python环境变量 分类: python ...
- Android用户分类管理,腾讯手机管家Android 7.10上线,微信整理助手实现智能精准分类...
- urllib urllib2 自己用
- 直播app系统源码,简单的登录界面(登录、注册、记住密码等按键)
- Markdown编辑器使用-yellowcong
- 【人工智能Prolog】Prolog解决数独问题
- 都是S赛,为什么EDG夺冠公认“含金量最高”?
- 友盟朋友圈社区使用详解-(无UI版)
- plupload插件的错误SCRIPT601
- js中关于时间的转化——将秒/毫秒转化成xx小时xx分钟xx秒
- linux桌面图标不见_Ubuntu系统桌面任务栏和启动器全部消失解决方案
- 偏度和峰度存在的意义
- mysql 切换主键
热门文章
- ios 内购 未能连接上苹果服务器,ios - 模拟器如何调试内购内容,无法连接iTunes Store...
- 区块链安全:闪电贷 Flashloan
- 2023秋季上海全球高端食品展览会
- 一个整数的阶乘最后有多少个0
- TCP与UDP区别及34连接
- 蚂蚁集团升级“蚂蚁链”,剑指全球最大的价值网络
- 《Splunk智能运维实战》——2.3 找出最常访问的网页
- 【Qt学习】 FFmpeg 解码播放本地视频
- Codeforces--501B--Misha and Changing Handles
- java中什么是类什么是对象