目录

  • 前言
  • A - Keanu Reeves(思维+水题)
    • 题目大意
    • 思路
    • AC代码
  • B - Number Circle(数学+思维)
    • 题目大意
    • 思路
    • AC代码
  • C - Computer Game (思维)
    • 题目大意
    • 思路
    • AC代码
  • D - Add on a Tree
  • E - Count Pairs (数学)
    • 题目大意
    • 思路
    • AC代码

前言

你们知道在《Young Sheldon》第五季开播之前的那段时间里,我是怎么度过的吗?
你们知道我的痛楚吗?

哦,我记得我好像又把TBBT看了一遍,还顺便刷了老友记和权游。
我好像还挺快乐的,nmsl ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄。


8多说了,写完题解看我的谢耳朵去了(# ^ . ^ #)


A - Keanu Reeves(思维+水题)

比赛链接:https://codeforces.com/problemset/problem/1189/A

题目大意

给出一个只有010101组成的长度为nnn的字符串sss。
我们认为如果一个字符串中010101的数量不等,那么这个字符串就是一个好的字符串。

现在需要你把字符串sss划分成k(k>=1)k(k>=1)k(k>=1)个字符串 ,使得每个字符串都是好的。
问kkk最小可以是多少,并且输出划分之后的结果。

思路

简单的思维题。

首先先判断sss本身是否就是一个好的字符串,如果是就直接输出即可。
否则我们只需要把第一个字符单拿出来,剩下的作为另一个字符,这两个字符串一定都是好的。

从另一个角度来想,长度为奇数的字符串一定是好字符串

AC代码

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=2e5+100;int main()
{int n,a,b;a=b=0;cin>>n;string ss;cin>>ss;for(int i=0;i<n;i++){if(ss[i]=='1') a++;else b++;}if(a==b) cout<<"2"<<endl<<ss[0]<<" "<<ss.substr(1,n-1)<<endl;else cout<<"1"<<endl<<ss<<endl;
}

B - Number Circle(数学+思维)

比赛链接:https://codeforces.com/problemset/problem/1189/B

题目大意

给你n个数字a1,a2,…,ana_1, a_2, \ldots, a_na1​,a2​,…,an​。
现在你需要把这些数字填到一个有n个空位的圆环里,并使得圆环中满足条件:

任意一个数字都严格小于与它相邻的两个数字的和。

不可以的话输出NO
可以的话第一行输出YES,第二行输出一种可行的排列顺序a1,a2,…,ana_1, a_2, \ldots, a_na1​,a2​,…,an​,其中a1a_1a1​与a2、ana_2、a_na2​、an​相邻。

思路

又是一道简单的思维题。

我们给所有的数从小到大排个序,之后我们去想:哪些数字最有可能不满足条件

很显然就是最大的那个数字。
那么我们就需要给它安排两个好♂邻居,让它老实一点。


那么输出NO的情况就推断出来了:最大的数比其他任意两个数的和都大。
否则我们就让最大的数aaa、第一个小于 aaa 的数 bbb 和第二个小于 aaa 的数 ccc交换一下位置,让bbb和ccc把aaa包围住。

原本的顺序:c b a
交换之后:c a b

AC代码

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=2e5+100;
int a[maxn];
int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);if(a[n-1]>=a[n-2]+a[n-3]) cout<<"NO"<<endl;else{cout<<"YES"<<endl;for(int i=0;i<n-3;i++)cout<<a[i]<<" ";cout<<a[n-2]<<" "<<a[n-1]<<" "<<a[n-3]<<endl;}
}

C - Computer Game (思维)

比赛链接:https://codeforces.com/problemset/problem/1189/C

题目大意

给一个长度为nnn的数组sss。

规定函数f(l,r)f(l,r)f(l,r)的含义为:
(ssslll,sssl+1l+1l+1, …\ldots…,sssrrr)的和整除10的值。

有q次询问,每次都询问一个f(li,ri)f(l_i,r_i)f(li​,ri​)的值。

思路

纯纯的前缀和入门题。

AC代码

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1e5+100;
int s[maxn];
int main()
{int n;cin>>n;s[0]=0;for(int i=1;i<=n;i++){cin>>s[i];s[i]+=s[i-1];}int q;cin>>q;for(int i=0;i<q;i++){int l,r;cin>>l>>r;cout<<(s[r]-s[l-1])/10<<endl;}
}

D - Add on a Tree

比赛链接:https://codeforces.com/problemset/problem/1189/D

看不懂的一道题,题意读不懂,再观望一下大佬们的博客。

@llm,我滴超人!!!

@沉鱼落雁闭月羞花花容月貌美丽大方的铃铛仙女

@God Jun


E - Count Pairs (数学)

比赛链接:https://codeforces.com/problemset/problem/1189/E

题目大意

给你一个素数ppp,一个长度为nnn的数组aaa和一个整数kkk。

找出符合以下条件的(i,j)(1<=i<j<=n)(i,j)(1<=i<j<=n)(i,j)(1<=i<j<=n)的数量。

(ai+aj)(ai2+aj2)≡kmodp(a_i + a_j)(a_i^2 + a_j^2) \equiv k \bmod p(ai​+aj​)(ai2​+aj2​)≡kmodp

思路

这题也是十分的简单,就是卡精度卡的很死,longlonglong longlonglong才过去的。

我们只需要调整一下原本的公式。

首先我们取原本的公式为①式:
①(ai+aj)(ai2+aj2)≡kmodp(a_i + a_j)(a_i^2 + a_j^2) \equiv k \bmod p(ai​+aj​)(ai2​+aj2​)≡kmodp

这个式子给人一种不舒服的感觉,总感觉可以再化简一下。

我的初中老师曾教导我们:
看到式子里只有(a−b)(a-b)(a−b)或是(a+b)(a+b)(a+b)的时候,你就应该十分警觉地想到完全平方公式平方差公式

此时如果两边乘上(ai+aj)(a_i + a_j)(ai​+aj​)形成完全平方公式,貌似又把问题加重了。
但如果我们让①式的两边同时乘上(ai−aj)(a_i - a_j)(ai​−aj​)形成平方差公式②:
②(ai−aj)∗(ai+aj)(ai2+aj2)≡(ai−aj)∗kmodp(a_i - a_j)*(a_i + a_j)(a_i^2 + a_j^2) \equiv (a_i - a_j)*k \bmod p(ai​−aj​)∗(ai​+aj​)(ai2​+aj2​)≡(ai​−aj​)∗kmodp

化简一下得到③:
③(ai2−aj2)(ai2+aj2)≡(ai−aj)∗kmodp(a_i^2 - a_j^2)(a_i^2 + a_j^2) \equiv (a_i - a_j)*k \bmod p(ai2​−aj2​)(ai2​+aj2​)≡(ai​−aj​)∗kmodp

再化简一下得到④:
④(ai4−aj4)≡(ai−aj)∗kmodp(a_i^4 - a_j^4) \equiv (a_i - a_j)*k \bmod p(ai4​−aj4​)≡(ai​−aj​)∗kmodp

此时,我们觉得,把aia_iai​和aja_jaj​放到全等号的两边会更好看一些。
处理一下得到⑤:
⑤(ai4−ai∗k)modp≡(aj4−aj∗k)modp(a_i^4 - a_i*k)\bmod p \equiv (a_j^4 - a_j*k)\bmod p(ai4​−ai​∗k)modp≡(aj4​−aj​∗k)modp

此时问题就变成了找值相等的下标对数,用map记录就可以了。

AC代码

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
map<ll,ll> mp;
int main()
{ll n,p,k,x;cin>>n>>p>>k;for(int i=1;i<=n;i++){cin>>x;//cout<<x<<" "<<((x%p*x%p*x%p*x%p)%p-(k%p*x%p)+p)%p<<endl;mp[((x%p*x%p*x%p*x%p)%p-(k%p*x%p)+p)%p]++;}map<ll,ll>::iterator it;ll sum=0;for(it=mp.begin();it!=mp.end();it++){//cout<<it->first<<" "<<it->second<<endl;sum+=((it->second)*(it->second-1)/2);}cout<<sum<<endl;return 0;
}
/*(ai+aj)*(ai^2+aj^2)%p==k
(ai^2-aj^2)*(ai^2+aj^2)%p==k*(ai-aj)
(ai^4-aj^4)%p==k*ai-k*aj
(ai^4-k*ai)%p==(aj^4-k*aj)*/

感谢阅读,希望能对你产生一点用处。

"There's no shame in fear, my father told me." " What matters is how we face it."


吾日三省吾身:日更否?刷题否?快乐否? 更新了,但不是日更;已刷;happy! 吾心满意足。

Codeforces Round #572(div2)部分题解(A~C,E)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Codeforces Round #462 (Div. 2)题解

    Codeforces Round #462 (Div. 2) B题--我固执的认为1e18是18位数,导致被hack,花了20分钟才检查出这个错误,很僵硬 Codeforces 934C 题意 给定一 ...

  10. Codeforces Round #441 Div. 2题解

    A.直接判断相邻的边是不是最短边 是就来回走 不然就走一条第二的然后再来回走 #include<cstdio> #include<cstring> #include<al ...

最新文章

  1. SQL server 实例教程
  2. 什么是Gut–Skin Axis
  3. 使用VMware虚拟磁盘管理工具调整磁盘大小
  4. python怎么定义一个变量为空列表_python – 为什么一个类变量没有在列表理解中定义,但另一个是?...
  5. Tengine(Nginx)配置SSL(https),应用服务器(Tomcat)无需配置
  6. DNF私服商业服搭建教程
  7. android 跑马灯带图片,Android自定义跑马灯效果(适合任意布局)
  8. python中的np.ones_numpy常用函数normal、randn、shape、ones——持续更新中
  9. PyCharm下载安装以及使用教程
  10. 【C++】关于日期的计算
  11. 自定义View实战(一) 汽车速度仪表盘
  12. 【中亦安图】清算/报表/日终跑批程序之性能优化案例(5)
  13. 基于winform(C#)的飞鸟小游戏
  14. Intel系统编程指南第八章——8.4 多处理器(MP)初始化
  15. 越是穷人,就越需要大数据
  16. js代码转换成java代码_js代码转换为java
  17. C# 邮件发送帮助类
  18. 基于 C++ MFC 活塞环外观表面缺陷检测【100010409】
  19. 详细的图文Windows电脑设置自动关机/计划关机
  20. 移动联通各地网关数据

热门文章

  1. 计算机名校远程在职硕士信息汇总Online Master
  2. html div p区别,p标签和div标签的区别与用法
  3. 工业控制系统基础知识入门(一)
  4. 通过脚手架安装Ant+react+umi+dva项目(一)
  5. 计算机演示文稿应用主题,使用屏幕阅读器在 PowerPoint 中创建演示文稿的基本任务...
  6. Python数据库同步神器(一键同步)
  7. Java 判断IP地址为内网IP还是公网IP (针对IPv地址)
  8. python开发视频播放器_基于 Flask 的在线视频播放器
  9. 24_MySQL高可用之MMM
  10. 年轻时放纵享乐,不要指望年老时一念向善