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)题解相关推荐

  1. Codeforces Round #514 (Div. 2)题解

    Codeforces Round #514 (Div. 2)题解 A 喵,直接模拟. B 枚举所有盖章时的,合法的,左上角的位置.能盖的话就盖一下.最后check一下图案是否相等即可 C 一轮一轮的扔 ...

  2. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  3. 【算法题解】Codeforces Round #817 (Div. 4)题解

    文章目录 Codeforces Round #817 (Div. 4)题解 A. Spell Check B. Colourblindness C. Word Game D. Line E. Coun ...

  4. Codeforces Round #747 (Div. 2)题解

    Codeforces Round #747 (Div. 2)题解 (本博客将持续更新以后每场CF div2的题解,喜欢ACM.OI的小伙伴记得点个关注哟) 昨天夜晚刷网络流刷入迷了,渐渐就忘记了我还要 ...

  5. Codeforces Round #789 (Div. 2)题解

    Codeforces Round #789 (Div. 2)题解 A. Tokitsukaze and All Zero Sequence 原题链接 算法标签 贪心 排序 思路 情况一:数组存在零 → ...

  6. Codeforces Round #788 (Div. 2) A B C D E

    Codeforces Round #788 (Div. 2) A B C D E 打的好 ** 烂总结一下把. A.Prof. Slim 解法: 贪心,统计正负符号,因为每个位上的数只能是其绝对值的正 ...

  7. Codeforces Round #748 (Div. 3) 题解 完整A~G

    Codeforces Round #748 (Div. 3) 题解 A. Elections 题意 已知竞选中三个候选人的当前得票数 a , b , c a,b,c a,b,c,现在可以增加任何一个人 ...

  8. Codeforces Round #533 (Div. 2)题解

    link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...

  9. Codeforces Round #734 (Div. 3) 题解

    Hello大家好,今天给大家带来的是 Codeforces Round #734 (Div. 3) 的全题目讲解. 本文链接:https://www.lanqiao.cn/questions/2040 ...

最新文章

  1. 微服务之API网关接口设计
  2. 服务器系统策略功能,设置服务器系统口令复杂度策略
  3. opencv resize (C/C++/Python)
  4. Swift - 使用CollectionView实现图片Gallery画廊效果(左右滑动浏览图片)
  5. 机房收费系统--准备工作
  6. 没有可用软件包 jenkins。_Jenkins分布式构建与并行构建
  7. SpringMVC框架使用注解执行定时任务
  8. 把python37添加到环境变量配置_linux设置python环境变量 分类: python ...
  9. Android用户分类管理,腾讯手机管家Android 7.10上线,微信整理助手实现智能精准分类...
  10. urllib urllib2 自己用
  11. 直播app系统源码,简单的登录界面(登录、注册、记住密码等按键)
  12. Markdown编辑器使用-yellowcong
  13. 【人工智能Prolog】Prolog解决数独问题
  14. 都是S赛,为什么EDG夺冠公认“含金量最高”?
  15. 友盟朋友圈社区使用详解-(无UI版)
  16. plupload插件的错误SCRIPT601
  17. js中关于时间的转化——将秒/毫秒转化成xx小时xx分钟xx秒
  18. linux桌面图标不见_Ubuntu系统桌面任务栏和启动器全部消失解决方案
  19. 偏度和峰度存在的意义
  20. mysql 切换主键

热门文章

  1. ios 内购 未能连接上苹果服务器,ios - 模拟器如何调试内购内容,无法连接iTunes Store...
  2. 区块链安全:闪电贷 Flashloan
  3. 2023秋季上海全球高端食品展览会
  4. 一个整数的阶乘最后有多少个0
  5. TCP与UDP区别及34连接
  6. 蚂蚁集团升级“蚂蚁链”,剑指全球最大的价值网络
  7. 《Splunk智能运维实战》——2.3 找出最常访问的网页
  8. 【Qt学习】 FFmpeg 解码播放本地视频
  9. Codeforces--501B--Misha and Changing Handles
  10. java中什么是类什么是对象