Cdoefroces #354
A题
题意:给定一些数,然后求一次交换以后最大的数和最小的数之间的最大距离
分析:找到最大数和最小数的位置,然后判断是把位置大的移到最后还是把位置小的移到开始位置即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int a[maxn];
int main()
{
int n;
while(cin>>n)
{
int minx,maxx;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=n;i++){
if(a[i]==)
{
minx=i; break;
}
}
for(int i=;i<=n;i++){
if(a[i]==n){
maxx=i; break;
}
}
if(minx>maxx)
swap(minx,maxx);
cout<<maxx-minx+max(minx-,n-maxx)<<endl;
}
return ;
}
B题
题意:给定一些倒香槟的杯子,第一层1个,第二层2个,依此下去,问第t秒有多少个杯子水是满的
分析:为了考虑精度问题,我们将t乘1024,然后进行模拟,对每1秒流下的水,到下下一层以后一定会变成(a[i][j]-1)/2
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
const int inf=<<;
int a[maxn][maxn];
int n,t;
int main()
{
while(cin>>n>>t)
{
memset(a,,sizeof(a));
a[][]=t*inf;
int ans=;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++){
if(a[i][j]>=inf){
ans++;
a[i+][j]+=(a[i][j]-inf)/;
a[i+][j+]+=(a[i][j]-inf)/;
}
}
cout<<ans<<endl;
}
return ;
}
C题
题意:给定一个字符串,可以改变其中k个字母,问最大的重复字串长度,字符串只含有a和b
分析:这题是一个原题,对于区间[l,r],看其上0的数量是否大于k,若小于k,则[l+1,r]必然也小于k,统计[1,n]上的最大长度即可。统计的时候用二分思想,然后分别对a和b进行统计,最后求其最大值即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
char s[maxn];
int a[maxn],b[maxn],dp1[maxn],dp2[maxn];
int n,k;
int main()
{
while(cin>>n>>k)
{
memset(dp1,,sizeof(dp1));
//memset(a,0,sizeof(a));
scanf("%s",s);
for(int i=;i<n;i++){
int t=i;
if(s[i]=='a')
a[++t]=;
else
a[++t]=;
}
//for(int i=1;i<=n;i++)
// cout<<a[i];
//cout<<endl;
for(int i=;i<=n;i++){
if(!a[i])
dp1[i]=dp1[i-]+;
else
dp1[i]=dp1[i-]; }
int left1=,right1=,mx1=,j1=;
for(int i=;i<=n;i++){
while(dp1[i]-dp1[j1]>k) j1++;
if(mx1<i-j1){
mx1=i-j1;
left1=j1+;
right1=i;
}
} memset(dp2,,sizeof(dp2));
//memset(b,0,sizeof(b));
for(int i=;i<n;i++){
int h=i;
if(s[i]=='b')
b[++h]=;
else b[++h]=;
} for(int i=;i<=n;i++){
if(!b[i])
dp2[i]=dp2[i-]+;
else
dp2[i]=dp2[i-];
}
int left2=,right2=,mx2=,j2=;
for(int i=;i<=n;i++){
while(dp2[i]-dp2[j2]>k) j2++;
if(mx2<i-j2){
mx2=i-j2;
left2=j2+;
right2=i;
}
}
cout<<max(mx1,mx2)<<endl;
}
return ;
}
Cdoefroces #354的更多相关文章
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- SCUT - 354 - CC的简单多项式 - 杜教筛
https://scut.online/p/354 跟多项式一点关系都没有. 注意到其实两个多项式在1处求值,那么就是他们的系数加起来. 列一列发现系数就是n以内两两求gcd的值,还自动把0去掉了. ...
- <Binary Search> 81 (高频)34 (很难hard, 高频)315 (hard)354
81. Search in Rotated Sorted Array II 如果中间的数小于最右边的数,则右半段是有序的,若中间数大于最右边数,则左半段是有序的.而如果可以有重复值,就会出现来面两种情 ...
- SQLPrompt 6.3.0.354 完美破解 安装于 SQL Server 2012/2014
SQL SERVER 2012格式化 SQL SERVER 2014格式化 SQLPrompt_6.4.0.641 破解版 百度云下载 迅雷下载 百度网盘下载 SQL Prompt 是一款拥有SQL智 ...
- Java实现 LeetCode 354 俄罗斯套娃信封问题
354. 俄罗斯套娃信封问题 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一 ...
- 1、线性DP 354. 俄罗斯套娃信封问题
354. 俄罗斯套娃信封问题 https://leetcode-cn.com/problems/russian-doll-envelopes/ 算法分析 首先我们从两种情况来讨论这个问题: w无重复值 ...
- JavaMoney规范(JSR 354)与对应实现解读
一.概述 1.1 当前现状 当前JDK中用来表达货币的类为java.util.Currency,这个类仅仅能够表示按照**[ISO-4217]**描述的货币类型.它没有与之关联的数值,也不能描述规范外 ...
- Codeforces Round #354 (Div. 2)
贪心 A Nicholas and Permutation #include <bits/stdc++.h> typedef long long ll; const int N = 1e5 ...
- leetCode 354. Russian Doll Envelopes
You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...
随机推荐
- UVA 10759 Dice Throwing
题意为抛n个骰子凑成的点数和大于或等于x的概率,刚开始用暴力枚举,虽然AC了,但时间为2.227s,然后百度了下别人的做法,交了一遍,靠,0.000s,然后看了下思路,原来是dp,在暴力的基础上记忆化 ...
- 天天果园,中粮我买网等生鲜APP竞品分析
奈何对生鲜行业的品类,价格,供应链不熟悉,想先从APP开始来了解生鲜行业和各个生鲜企业,若有不足之处,还望海量,也请帮忙指正. 选取了以下竞品:天天果园,易果生鲜,一米鲜,中粮我买网,爱鲜蜂,每日优鲜 ...
- WebSocket学习笔记——无痛入门
WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报 分类: 物联网学习笔记(37) 版权声明:本文为博主原 ...
- arrayList里的快速失败
快速失败是指某个线程在迭代集合类的时候,不允许其他线程修改该集合类的内容,这样迭代器迭代出来的结果就会不准确. 比如用iterator迭代collection的时候,iterator就是另外起的一个线 ...
- Junit单元测试的简单使用(主要是在spring框架下的项目)
首先是解释什么是单元测试,单元测试是指对于一个大型项目里,对于单一模块或者单一接口的测试. 然后解释为什么要写单元测试,首先对于一个大型的项目,如果你每次都要重启一遍服务器调页面或者接口的bug,那就 ...
- PHPer转战Android的学习过程以及Android学习
原文作者: eoeadmin原文地址: http://my.eoe.cn/shuhai/archive/19684.html-------------------------------------- ...
- Windows应用程序要点
一个完整的Windows应用程序除了WinMain函数外,还包含用于处理用户动作和窗口消息的窗口函数. Windows应用程序具有的一些特性: 消息驱动机制 图形设备接口(GDI) 基于资源的程序设 ...
- .NET中公共变量与属性的区别
在我们的程序中经常会出现以下的代码: 如: 成员变量 public string Name; 或者用属性 private string name ...
- js 鼠标事件
<html><head lang="en"> <meta charset="UTF-8"> <title>< ...
- 素数个数的位数<Math>
小明是一个聪明的孩子,对数论有着很浓烈的兴趣.他发现求1到正整数10^n (10的n次方)之间有多少个素数是一个很难的问题,该问题的难点在于决定于10^n 值的大小. 告诉你n的值,并且用ans表示小 ...