链接: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. phpBB3导入版面的Python脚本

    关联的数据表 在phpBB3中导入版面时, 需要处理的有两张表, 一个是 forums, 一个是 acl_groups. 如果是干净的论坛, 可以不保留安装时填入的默认分区和版面, 直接用以下语句初始 ...

  2. P Invoke struct结构

    一.获取Struct CHCNetSDK.NET_DVR_PTZPOS pos = new CameraTest.CHCNetSDK.NET_DVR_PTZPOS(); int size = Mars ...

  3. 2、金融之关于BOLL

    一.BOLL(1)什么是BOLL线☆ BOLL指标又叫布林线指标(Bolinger Bands),是由约翰·布林格(John Bollinger)根据统计学中的标准差原理设计出来的一种非常简单实用的技 ...

  4. Atitit 关于共享经济之共享男女朋友的创业计划

    Atitit 关于共享经济之共享男女朋友的创业计划 1. 共享经济的历史与趋势 1 1.1. 共享经济三大特征=产能过剩+共享平台+人人参与. 1 1.2. 共享经济是个大趋势,使用权渐渐的取代所有权 ...

  5. Could not resolve all dependencies for configuration ':classpath'

    我这里是copy过来的项目包名没有修改,导致依赖找不到

  6. vue2.0 项目搭建 和vue 2.0 electron 项目搭建

    1.关于electron vue 项目的搭建 全局或者局部安装项目vue: 脚手架指令生成: npm install -g vue-cli vue init simulatedgreg/electro ...

  7. MySQL字符集详解

    Reference:  https://www.cnblogs.com/wcwen1990/p/6917109.html MySQL字符集详解   一.字符集和校验规则 字符集是一套符合和编码,校验规 ...

  8. Intellij 高亮显示与选中字符串相同的内容

    如下图所示,我的是 2018,不同版本,Schema 可能要 Save As一下

  9. [转]理解Go语言中的nil

    最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频. nil是什么 相信写过Golang的程序员对下面一段代码是非常非常熟 ...

  10. Ubuntu下安装open-falcon-v0.2.1

    在Ubuntu下安装open-falcon和Centos下安装的方法有点区别,因为Ubuntu使用的包管理器是apt-get,而Centos下使用的是Yum,建议不要再Ubuntu下使用yum 建议自 ...