链接: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. 图 总结 AI

    这个哥们 总结的太好了, 我忍不住就“偷”过来了 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学. 人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算 ...

  2. 对于 url encode decode js 和 c# 有差异

    在js对一个值进行解码使用:decodeURIComponent,编码使用:encodeURIComponent

  3. [转]Ubuntu18.04搜狗拼音输入法候选栏乱码解决方法

    经常碰到安装完搜狗拼音输入法后候选栏是乱码的情况,解决方法如下: 输入如下命令: cd ~/.config sudo rm -rf SogouPY* sogou* 1 2 之后重启即可. 安装过程可参 ...

  4. Object C函数指针@selector

    其作用相当于函数指针,现在我看到的大多说用法都是在调用某些函数需要传递一个 函数指针 参数时,使用@selector.它会在当前类里面查找selector后面所跟的函数,返回一个SEL类型的值.  S ...

  5. 物联网架构成长之路(30)-Spring Boot Admin微服务WebUI监控

    0. 前言 一个完整的微服务解决方案包含了许多微服务,基于我们需要观察各个微服务的运行状态,因此Spring Boot 生态提供了Spring Boot Admin 这个组件来实现微服务管理WEB U ...

  6. css3+svg实现波浪图

    <!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>css+svg实现波浪图 ...

  7. SSH使用小记

    0.是什么 SSH(Secure Shell)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.(更多详情可参阅维基百科 https://zh.wikipedia.org/wi ...

  8. WireShark如何抓取本地localhost的包

    今天将自己的电脑既作为客户端又作为服务端进行一个程序的测试,想着用WireShark来抓包分析一下问题,但由于WireShark只能抓取经过电脑网卡的包,由于我是使用localhost或者127.0. ...

  9. 导出jqgrid表格数据为EXCEL文件,通过tableExport.js插件。

    今天公司项目需要做个导出功能,将jqgrid查询出的数据导出为EXCEL表格文件,期间遇到两个问题: 1.导出报错 uncaught exception: INVALID_CHARACTER_ERR: ...

  10. String 源码探究

    起因:忽然想到平时用的HashMap 当key是字符串的时候为什么总可以覆盖,然后看了String的源码发现: private final char value[]; private int hash ...