sdcf day1 qwq比赛题解
写在前面
来到夏令营的第一场比赛,全是水题(第一题除外,不过是原题还是之前做过的,而且是并查集的果题,咕咕咕)
A
链接
思路
我就不写了,去看luogu题解吧,传送门
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=4e5;
struct data
{
int nxt,to;
}e[maxn<<1];
int head[maxn],tot;
void add(int u,int v)
{
e[++tot]=(data){head[u],v};
head[u]=tot;
}
int f[maxn],n,m,v[maxn],k,a[maxn],cnt,ans[maxn];
int find(int x)
{
return x==f[x]?x:f[x]=find(f[x]);
}
void dfs(int x)
{
v[x]=1;
for (int i=head[x];i;i=e[i].nxt)
{
if (!v[e[i].to])
{
int f1=find(x),f2=find(e[i].to);
if (f1!=f2) f[f1]=f2;
dfs(e[i].to);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=0;i<n;++i) f[i]=i;
for (int i=0;i<m;++i)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v); add(v,u);
}
scanf("%d",&k);
for (int i=0;i<k;++i) scanf("%d",&a[i]),v[a[i]]=1;
for (int i=0;i<n;++i)
{
if (!v[i])
{
cnt++;
dfs(i);
}
}
ans[k]=cnt;
memset(v,0,sizeof(v));
for (int i=0;i<k;++i) v[a[i]]=1;
for (int i=k-1;i>=0;--i)
{
v[a[i]]=0;
cnt++;
for (int j=head[a[i]];j;j=e[j].nxt)
{
if (!v[e[j].to])
{
int f1=find(a[i]),f2=find(e[j].to);
if (f1!=f2)
{
f[f2]=f1;
cnt--;
}
}
}
ans[i]=cnt;
}
for (int i=0;i<=k;++i) printf("%d\n",ans[i]);
return 0;
}
B
链接
翻译
我们有一串字母\('a'\)和\('b'\)。 我们想对它进行一些操作。 在每一步中,我们在字符串中选择一个子串\(“ab”\),并将其替换为字符串\(“bba”\)。
如果我们没有\(“ab”\)作为子串,我们的工作就完成了。 打印我们应该执行的最小步骤数,以便以\(10 ^ 9 + 7\)模式完成工作。
如果字符串中某个字母'a'后面有一个字母'b',则字符串“ab”显示为子字符串。
思路
我们可以看出来每次把\(ab\)换成\(bba\)相当于把b全部提前把\(a\)放后面,所以只要统计\(b\)的数量在进行累加就行了,注意的是每次累计后b的计数器要乘\(2\)
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<string>
#include<cstring>
using namespace std;
#define int long long int
inline int read() {
char c = getchar();
int x = 0, f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
const int mod=1e9+7;
string p;
int ans=0;
int js;
signed main()
{
cin>>p;
int len=p.length() ;
for(int i=len-1;i>=0;--i)
{
if(p[i]=='b') {js++;js%=mod;}
else {ans+=js%mod;ans%=mod;js=(js*2)%mod;}
}
cout<<ans;
return 0;
}
C
链接
翻译
思路
首先明确一点
想要\(gcd(省略.....)=1\)就一定要让a数组内全是偶数,所以我们可以从这里下手
下面列举一下可能的情况
操作前---------操作后
奇数,奇数---------偶数,偶数
奇数,偶数---------奇数,奇数
偶数,奇数---------奇数,奇数
偶数,偶数---------偶数,偶数
如果原来两个数都是偶数的话,那么操作数为0.
如果原来两个数都是奇数的话,那么操作数为1.
如果原来两个数是一奇一偶的话,那么操作数为2.
所以就\(ok\)了
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<string>
#include<cstring>
using namespace std;
#define int long long int
inline int read() {
char c = getchar();
int x = 0, f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
const int N=300011;
int py_gcd(int x,int y) {
if(y==0) return x;
else return py_gcd(y,x%y);
}
int n;
int a[N];
int p;
int ans;
signed main() {
cin>>n;
for(int i=1; i<=n; ++i) a[i]=read();
int gcds=a[1];
for(int i=2; i<=n; ++i) gcds=py_gcd(gcds,a[i]);
if(gcds>1) {
cout<<"YES"<<'\n'<<0;
return 0;
}
//处理2个奇数的情况
for(int i=1; i<=n; ++i) {
if((a[i]&1) && (a[i+1]&1)) {
ans++;
int tmp;
tmp=a[i];
a[i]=-2*a[i+1];
a[i+1]=2*tmp;
}
}
//一个奇数的一个偶数的情况
for(int i=1; i<=n; ++i) {
if(a[i]&1) ans+=2;
}
cout<<"YES"<<'\n'<<ans;
return 0;
}
// n个数,n<=1e5,操作:把ai,ai+1 替换成 a[i]-a[i+1],a[i]+a[i+1],问gcd(a1,a2..an)>1的最少操作次数.
sdcf day1 qwq比赛题解的更多相关文章
- 纪中OJ 2019.02.15【NOIP提高组】模拟 B 组 梦回三国 比赛题解(第一个)
声明 旁边的同学小 H(胡)对我说: “哟,比赛拿了 140,强!要知道,如果哥第三题 AC 了,哥就 230 了,你个废柴!!!(比赛实际分数 130 额呵)” 顿时,千万草泥马从我心中奔腾而过:你 ...
- 贪心(qwq)习题题解
贪心(qwq)习题题解 SCOI 题解 [ SCOI2016 美味 ] 假设已经确定了前i位,那么答案ans一定属于一个区间. 从高位往低位贪心,每次区间查找是否存在使此位答案为1的值. 比如6位数确 ...
- [比赛题解]CWOI2019-1
[比赛题解]CWOI2019-1 比赛日期:2019.10.12 T1 一道神仙DP题. 我们考虑\(dp[i][j][k]\)表示最后\(i\)位数,\(i-1\)位都是9,最后一位为\(j\),最 ...
- 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)
科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
终于打了一场CF,不知道为什么我会去打00:05的CF比赛…… 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...
- 【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)
剧毒比赛,至少涨了分对吧.: ( [A]Left-handers, Right-handers and Ambidexters 题意: 有\(l\)个右撇子,\(r\)个左撇子,\(a\)个双手都惯用 ...
- 【codeforces】【比赛题解】#931 CF Round #468 (Div. 2)
因为太迟了,所以没去打. 后面打了Virtual Contest,没想到拿了个rank 3,如果E题更快还能再高,也是没什么想法. [A]Friends Meeting 题意: 在数轴上有两个整点\( ...
- 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)
没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...
- 【codeforces】【比赛题解】#862 CF Round #435 (Div.2)
这次比赛打得很舒服,莫名得了个Rank41,涨了219的Rating,就比较优秀.不过还是没有闫神厉害啊.题目链接::P. [A]MEX 题意: Evil博士把Mahmoud和Ehab绑架到了邪恶之地 ...
随机推荐
- eclipse创建springboot项目的三种方法
本文链接:https://blog.csdn.net/mousede/article/details/81285693 方法一 安装STS插件 安装插件导向窗口完成后,在eclipse右下角将会出现安 ...
- Java中守护线程的总结
在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...
- 环境变量-path
配置的是bin二进制可执行程序,用于系统查找程序的位置
- C#服务器全面讲解与制作
C#服务器全面讲解与制作一 环境配置与基础架构 环境配置 基础的服务器架构 这里我会讲解高级的C#服务器的全面制作流程 会对大家有很大的帮助 不过在这个教程中主要是讲解服务器的制作,所以不会讲解客户端 ...
- JS中的if语句内如何加or使多个条件通过
if(a==1&&b==2){ //do something }//条件是a等于1 并且 b等于2时才能成立,两个条件必须同时满足 if(a==1||b==2){ //do som ...
- 2019 4399java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.4399等公司offer,岗位是Java后端开发,最终选择去了4399. 面试了很多家公司,感觉大部分公司考察的点 ...
- 基于windows平台搭建elasticsearch 补充
https://www.cnblogs.com/skychen1218/p/8108860.html 参考此大神写的内容,感谢感谢. 不过 好像漏掉了一块内容. 导致出现问题 连接不上的问题.后来修改 ...
- Linux理论小结
1.Linux是什么 2.Linux的种类 3.Linux的软件安装方法 4.Linux的软卸载方法 5.Linux的目录功能 1.Linux是什么 2.Linux的种类 3.Linux的软件安装方法 ...
- Mysql 整数类型的字段的属性设置及常用的函数
数据类型 二.MySQL支持的数据类型 数值类型.日期类型.字符串类型 1.数值类型 1)整数类型 tinyint.smallint.mediumint.int和bigint 2)zerofill属性 ...
- mutable用于修改const成员函数中的成员变量
http://no001.blog.51cto.com/1142339/389840/ mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中 ...