Codeforces Global Round 1

题目链接:https://codeforces.com/contest/1110

A. Parity

题意:

给出{ak},b,k,判断a1*b^(k-1)+a2*b^(k-2)+...+ak*b^0的奇偶性。

题解:

暴力求模2意义下的值就好了。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+;
int n;
int b,k;
int a[N];
ll qp(ll A,ll B){
ll ans = ;
while(B){
if(B&) ans=ans*A%;
A=A*A%;
B>>=;
}
return ans;
}
int main(){
cin>>b>>k;
for(int i=;i<=k;i++) scanf("%d",&a[i]);
int t=b%;
int sum = ;
for(int i=k-;i>=;i--){
sum=sum+a[k-i]*qp(t,i);
sum%=;
}
if(sum&) cout<<"odd";
else cout<<"even";
return ;
}

B. Tape

题意:

在[1,m]这个区间中,有n个点,现在要用k个木棍去覆盖完这些点,问最短覆盖长度为多少。

题解:

首先将起始点和终点间的距离求出来,然后考虑将不需要的一些覆盖给减去。

具体做法就是用优先队列保存两个相邻点之间的间隔,然后不断取最大的间隔减去,最后使得剩下的区间还剩下k个即可。

代码如下:

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = 1e5+;
int n,m,k;
ll a[N],d[N];
ll ans;
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%I64d",&a[i]);
ans=a[n]-a[]+;
priority_queue <ll> q;
for(int i=;i<n;i++){
d[i]=a[i+]-a[i];
q.push(d[i]-);
}
int cnt = ;
while(cnt<k){
ll now = q.top();q.pop();
cnt++;
ans-=now;
}
cout<<ans;
return ;
}

C. Meaningless Operations

题意:

有多个询问,每次询问会输入一个数a,然后对于所有的数b(1<=b<a),求max{ gcd(a&b,a^b) }。

题解:

这个可以打表来做。

如果想的话,就是分两种情况考虑:一种是所有二进制位数都为1,另一种就是并非这样。

第二种思考起来比较简单,答案肯定为2^x-1,我们取的b只需要刚好把a二进制中的0填补就行了。

第一种情况会有一个这样的性质:a&b+a^b=a。现在设g=gcd(a&b,a^b),所以现在有g|a&b,g|a^b,那么自然有g|a。

我们会发现g其实为a的因子,那么这种情况找a的最大因子就好啦。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int q;
ll a;
ll p2[];
ll Print(ll x){
for(ll i=;i*i<=x;i++){
if(x%i==){
return x/i;
}
}
return ;
}
int main(){
cin>>q;
p2[]=;
for(int i=;i<=;i++) p2[i]=p2[i-]*;
while(q--){
cin>>a;
int i;
for(i=;i>=;i--) if((<<i)&a) break ;
if(a&(a+)) cout<<p2[i+]-<<endl;
else cout<<Print(a)<<endl;
}
return ;
}

D. Jongmah

题意:

给出n个数,数的大小不超过m,问最多有多少个类似于(x,x,x),(x-1,x,x+1)这样的三元组,每个数最多用一次。

题解:

对于我这样的蒟蒻来说,dp方程式理解了很久,感觉十分巧妙。

首先,就是对于类似于(x-1,x,x+1)这样的三元组来说,我们只需要考虑不超过三个的情况就可以了。因为当其超过三个时,直接选(x,x,x)这种类型得到的答案是一样的。

设dp(i,j,k)的定义为:当前在i这个位置,有j个(i-1,i,i+1)三元组,有k个(i,i+1,i+2)这样的三元组。

转移的话就从(i-2,i-1,i),(i-1,i,i+1) (即i-1)转移过来,我们在计算的时候附加上(x,x,x)这种类型就好了。

因为每次都从i-1转移过来,所以还可以用滚动数组优化掉一维,但是不优化对于这题也没啥影响~

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+;
int n,m;
int a[N],dp[N][][];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
a[x]++;
}
for(int i=;i<=m;i++){
for(int j=;j<;j++){
for(int k=;k<;k++){
for(int l=;l<;l++){
if(l+j+k>a[i]) continue ;
dp[i][k][l]=max(dp[i][k][l],dp[i-][j][k]+l+(a[i]-l-k-j)/);
}
}
}
}
cout<<dp[m][][];
return ;
}

E. Magic Stones

题意:

给出两个数列{cn},{tn},现在可以进行一些变化,比如对于ci来说,可以让ci=ci-1+ci+1-c(2<=i<n),变化的次数以及位置不限,问是否最后能得到t数列。

题解:

这题也比较巧妙吧,首先判断一下首尾可以知道是否可行。

之后根据这个式子,利用差分数组来解。

设di=ci+1-ci,那么当ci变化后,di=ci'-ci-1=ci+1-ci=di+1,di+1=di,也就是说,两个差分数组相当于换了下位置。

也就是说,题目中的操作,实质上是不断交换差分数组的位置。

之后就有很多种方法了,给出我的代码吧:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+;
int n;
ll c[N],t[N],d[N];
multiset <ll> s;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&c[i]);
for(int i=;i<=n;i++) scanf("%d",&t[i]);
if(c[]!=t[] || c[n]!=t[n]){
cout<<"No";
return ;
}
for(int i=;i<n;i++) d[i]=c[i+]-c[i],s.insert(d[i]);
for(int i=;i<=n;i++){
ll need = t[i]-t[i-];
auto it = s.lower_bound(need);
if(*it==need){
s.erase(it);
}else{
cout<<"No";
return ;
}
}
cout<<"Yes";
return ;
}

除开这种,还可以求出t数列的差分数组,然后对两个差分数组进行排序来比较,实现方法比我简单多了。

Codeforces Global Round 1 (A-E题解)的更多相关文章

  1. Codeforces Global Round 11 A~D题解

    A.Avoiding Zero 题目链接:https://codeforces.ml/contest/1427 题目大意:给定一个数组a1,a2...,an,要求找出一个a重排后的数组b1,b2,.. ...

  2. Codeforces Global Round 2 题解

    Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...

  3. Codeforces Global Round 11 个人题解(B题)

    Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...

  4. CodeForces Global Round 1

    CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...

  5. Codeforces Global Round 1 - D. Jongmah(动态规划)

    Problem   Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...

  6. Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)

    Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...

  7. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  8. 【手抖康复训练1 】Codeforces Global Round 6

    [手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思 ...

  9. Codeforces Global Round 3 题解

    这场比赛让我上橙了. 前三题都是大水题,不说了. 第四题有点难想,即使想到了也不能保证是对的.(所以说下面D的做法可能是错的) E的难度是 $2300$,但是感觉很简单啊???说好的歪果仁擅长构造的呢 ...

随机推荐

  1. python入门(续)

    类和方法 创建类 class A(object): def add(self, a,b ): return a+b count = A() print(count.add(3,5)) 初始化工作 cl ...

  2. Git的使用规范(一)

    1.建议使用 git add.2.不建议使用git commit -a3.撤销没有add的git checkout . 这个命令我们可以好好的介绍一下,如果当你对文件进行了修改,你没有进行git ad ...

  3. 玩转VIM-札记(三)

    玩转VIM-札记(三) 眨眼之间,5月就要从指间溜走,不给人一点点遐想的时间,我要赶紧抓着五月的尾巴,在博客中在添一笔.那么就还接着Vim来说吧.以Vim来为五月画上一个句号. 返璞归真 相信经过玩转 ...

  4. 『JavaScript』new关键字

    原文 new关键字做了什么 在JavaScript中,使用new关键字后,意味着做了如下四件事情: 创建一个新的对象,这个对象的类型是object: 设置这个新的对象的内部.可访问性和[[protot ...

  5. 【紫书】(UVa12096) The SetStack Computer

    突然转进到第五章的low题目的原因是做到图论了(紫书),然后惊喜的发现第一题就做不出来.那么里面用到了这一题的思想,我们就先解决这题.当然,dp必须继续做下去,这是基本功.断不得. 题意分析 这条题真 ...

  6. 每天一个Linux命令(13):apt命令

    apt-get和apt-cache命令是Debian Linux发行版中的APT软件包管理工具.所有基于Debian的发行都使用这个包管理系统.deb包可以把一个应用的文件包在一起,大体就如同Wind ...

  7. flask_sqlalchemy中db.session是如何保持请求间独立的--源码阅读笔记

    本文主要是为了验证两个问题: flask处理请求时通过新建线程.进程.协程的区别(顺带一提) flask_sqlalchemy是如何使用db.session使多个请求中保函的改变同一个表的sql操作不 ...

  8. 11-Mysql数据库----单表查询

    本节重点: 单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field ...

  9. HDFS分布式集群

    一.HDFS伪分布式环境搭建 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...

  10. 九度OJ--Q1473

    import java.util.ArrayList;import java.util.Scanner; /* * 题目描述: * 大家都知道,数据在计算机里中存储是以二进制的形式存储的. * 有一天 ...