链接:http://codeforces.com/contest/1062


A - Prank - [二分]

题意:

给出长度为 $n(1 \le n \le 100)$ 的数组 $a[1 \sim n]$,且满足 $1 \le a[1] < a[2] < \cdots < a[n] \le 1000$。现在JATC要擦掉其中一段连续的数字,但是要求能够通过剩余的其他数字,推断出擦掉的数字是什么。求JATC能擦掉的最长长度。

题解:

其实 $O(n)$ 就可以求出能擦掉的最长长度,但是因为 $n$ 比较小,懒得考虑太多,直接二分吧……

二分能擦掉的长度,对于固定的长度,$O(n)$ 枚举始末点判断能否擦除即可。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,a[maxn];
bool judge(int k)
{
for(int i=,j=i+k-;j<=n;i++,j++) {
if(a[j+]-a[i-]==k+) return ;
}
return ;
}
int main()
{
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
a[]=, a[n+]=;
int l=, r=n;
while(l<r)
{
int mid=(l+r+)/;
if(judge(mid)) l=mid;
else r=mid-;
}
cout<<l<<endl;
}

B - Math - [数学题]

题意:

给出一个正整数 $n(1 \le n \le 1e6)$,你现在可以对 $n$ 进行任意多次乘以正整数 $x$ 或者开方(当结果为整数时才允许开方)操作。

求结果最小为多少,达到这个结果最少进行多少次操作。

题解:

分解质因数 $n = {p_1}^{a_1}{p_2}^{a_2} \cdots {p_k}^{a_k}$,显然最后结果只能是 $p_1 p_2 \cdots p_k$,那么如何才能得到 $p_1 p_2 \cdots p_k$?

找到 $\max(a_i)$,求得比小于它的最小 $2^x$,这样一来先做一次乘法把 $n$ 乘到 ${p_1}^{2^x}{p_2}^{2^x} \cdots {p_k}^{2^x}$,然后做 $2^x$ 次开方操作即可得到 $p_1 p_2 \cdots p_k$。因此最少 $x+1$ 次操作。

(当然,还有一些数字本身就是最小结果,这些另作判断即可。)

AC代码:

#include<bits/stdc++.h>
using namespace std;
int n;
pair<int,int> solve(int n)
{
if(n<=) return make_pair(n,);
int res=,mx=, mn=;
for(int i=;i*i<=n;i++)
{
if(n%i==)
{
res*=i;
int cnt=;
while(n%i==) n/=i, cnt++;
mx=max(cnt,mx);
mn=min(cnt,mn);
}
}
if(n>) res*=n, mx=max(,mx), mn=min(,mn);
int t=ceil(log2(mx))+1e-;
if(mn==mx && (<<t)==mx) return make_pair(res,t);
else return make_pair(res,t+);
}
int main()
{
while(cin>>n)
{
pair<int,int> ans=solve(n);
cout<<ans.first<<' '<<ans.second<<endl;
}
}

C - Banh-mi - [简单思维题][贪心+前缀和+快速幂]

题意:

有一个食物,将其分成 $n(1 \le n \le 1e5)$ 份,编号为 $1 \sim n$,第 $i$ 份食物的初始美味度为 $x_i(x_i \in {0,1})$,

现在有 $q(1 \le q \le 1e5)$ 次查询,每个查询 $[l,r]$ 代表现在只考虑该区间内的食物,每次我吃其中的某一份食物 $i$,我的喜悦程度就会加上 $x_i$,同时区间内所有其他剩余的食物的 $x_j$ 都会加上 $x_i$。

现在要求对每个查询,输出我最大能获得的喜悦程度。

题解:

首先肯定是贪心地吃食物,每次都吃 $x_i$ 最大的食物。

假设初始区间内有 $a$ 个 $1$,$b$ 个 $0$,那么先吃完所有初始美味度为 $1$ 的食物,得到喜悦程度为

$1 + 2 + 4 + \cdots + 2^{a-1} = 2^0 + 2^1 + 2^2 + \cdots + 2^{a-1} = 2^a - 1$

接下来,剩下的初始美味度为 $0$ 的食物,现在美味度都变成了 $2^a - 1$,吃完这些食物得到喜悦程度为

$(2^a - 1) \cdot 2^0 + (2^a - 1) \cdot 2^1 + \cdots + (2^a - 1) \cdot 2^{b-1} = (2^a - 1)(2^0 + 2^1 + \cdots + 2^{b-1}) = (2^a - 1)(2^b - 1)$

因此我只需要通过前缀和,就能 $O(1)$ 统计出任意区间内 $0$ 和 $1$ 的数目,然后只需要快速幂求出 $2^a - 1 + (2^a - 1)(2^b - 1) = (2^a - 1)2^b$ 即可。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+;
const int maxn=1e5+;
int n,q;
char s[maxn];
int c[][maxn];
ll fpow(ll a,ll n)
{
ll res=,base=a%mod;
while(n)
{
if(n&) res*=base, res%=mod;
base*=base, base%=mod;
n>>=;
}
return res%mod;
}
int main()
{
scanf("%d%d",&n,&q);
scanf("%s",s+);
c[][]=c[][]=;
for(int i=,x;i<=n;i++)
{
x=s[i]-'';
c[x][i]=c[x][i-]+;
c[x^][i]=c[x^][i-];
}
for(int i=,l,r;i<=q;i++)
{
scanf("%d%d",&l,&r);
ll a=c[][r]-c[][l-], b=c[][r]-c[][l-];
printf("%lld\n",(fpow(,a+b)-fpow(,b)+mod)%mod);
}
}

D - Fun with Integers - []


E - Company - []

Codeforces 1062 - A/B/C/D/E - (Undone)的更多相关文章

  1. Codeforces 785 - A/B/C/D/E - (Undone)

    链接:https://codeforces.com/contest/785 A - Anton and Polyhedrons #include<bits/stdc++.h> using ...

  2. Codeforces 1138 - A/B/C/D/E - (Undone)

    链接:https://codeforces.com/contest/1137 A - Skyscrapers 题解:对于每一段 $1$ 和每一段 $2$,统计他们的长度.因此对于相邻的两段长度求较小值 ...

  3. Codeforces 677 - A/B/C/D/E - (Undone)

    链接: A - Vanya and Fence - [水] AC代码: #include<bits/stdc++.h> using namespace std; ; int n,h; in ...

  4. Codeforces 1032 - A/B/C/D/E - (Undone)

    链接:http://codeforces.com/contest/1032/ 是真的真的真的忍不住想吐槽这题意是真的真的真的读不懂…… A - Kitchen Utensils - [简单数学题] 题 ...

  5. Codeforces 1062 E - Company

    E - Company 思路: 首先,求出每个点的dfs序 然后求一些点的公共lca, 就是求lca(u, v), 其中u是dfs序最大的点, v是dfs序最小的大点 证明: 假设o是这些点的公共lc ...

  6. Codeforces 1154 - A/B/C/D/E/F/G - (Undone)

    链接:https://codeforces.com/contest/1154 A - Restoring Three Numbers - [水] #include<bits/stdc++.h&g ...

  7. Codeforces 1114 - A/B/C/D/E/F - (Undone)

    链接:http://codeforces.com/contest/1114 A - Got Any Grapes? 题意:甲乙丙三个人吃葡萄,总共有三种葡萄:绿葡萄.紫葡萄和黑葡萄,甲乙丙三个人至少要 ...

  8. Codeforces 1043 - A/B/C/D/E/F - (Undone)

    链接:http://codeforces.com/contest/1043 A - Elections - [水水水水题] 题意: 我和另一个人竞争选举,共有 $n$ 个人投票,每个人手上有 $k$ ...

  9. Codeforces 659 - A/B/C/D/E/F/G - (Undone)

    链接:https://codeforces.com/contest/659 A - Round House - [取模] AC代码: #include<bits/stdc++.h> usi ...

随机推荐

  1. jenkins获取git上的源码

    jenkins获取git上的源码会遇到三种情况,我们在这里会分别介绍一下: 一.获取git上public(公有)的项目 只需配置仓库的URL即可 jenkins下使用git获取源码的配置方法 二.获取 ...

  2. 3分钟搞明白信用评分卡模型&模型验证

    信用评分卡模型在国外是一种成熟的预测方法,尤其在信用风险评估以及金融风险控制领域更是得到了比较广泛的使用,其原理是将模型变量WOE编码方式离散化之后运用logistic回归模型进行的一种二分类变量的广 ...

  3. mac ssh 连接超时

    打开终端,进入,/etc/ssh.sudo vi ssh_config 最后一行添加 ServerAliveInterval30 然后保存就可以了

  4. 安装Docker,Asp.net core

    升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署 Docker从入门到实践 一.安装Docker a).设置Docker仓库 1.按惯例,首先更新Ubuntu的包索引 ...

  5. 告别set和get,两大利器轻松搞定model转换

    场景一:一般我们遇到需要新建model,常规做法就是创建一个类,老老实实的定义好model中的所有属性,一般来说属性对应的set方法和get方法都是少不了的,有时候还需要toString甚至equal ...

  6. [转]CentOS6 Linux上安装ss5服务器

    本文章转自:http://blog.csdn.net/cuiyifang/article/details/10346239 最后我增加了添加防火墙规则的部分.感谢作者. ss5是常见的socks5 p ...

  7. MyBatis3 入门学习指南

    官网原文:http://www.mybatis.org/mybatis-3/zh/index.html 1.简介 1.1 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 ...

  8. json、数组、html标签的修改删除

    存数组 var aa=[1,2,3]; var sStorage=window.sessionStorage; sStorage.aa=aa; console.log(sStorage.aa); // ...

  9. Android Studio创建JAR/AAR库

    [时间:2017-09] [状态:Open] [关键词:Android,Android Studio,gradle,jar,aar,library] 0 引言 最近在工作中遇到了升级Android S ...

  10. js实现根据文本下标位置添加特殊标识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...