2018 ACM-ICPC亚洲区域赛(青岛)
Problem C---zoj 4060 Flippy Sequence
解题思路:要求进行两次操作,每次操作选择一个区间,问将s串变成t串中所选的两个区间构成的4元组有多少个。做法:找出s串与t串不同块的个数,然后做个简单的判断即可。
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e6+;
int T,n,cnt,answer;char s1[maxn],s2[maxn];
int main(){
while(~scanf("%d",&T)){
while(T--){
scanf("%d %s %s",&n,s1,s2);cnt=;
for(int i=;i<n;++i)//统计s串与t串不同块的个数
if((i==&&s1[i]!=s2[i])||(i>&&s1[i-]==s2[i-]&&s1[i]!=s2[i]))cnt++;
if(!cnt)answer=n*(n+)/;//全部相同:1+...+n
else if(cnt==)answer=*(n-);//只有一个不同块,①不同和不同进行反转,②不同和相同进行反转
else if(cnt==)answer=;//有两个不同块,三种操作,答案肯定为6
else answer=;//至少有3个不同块,无法实现2次操作,答案只能为0
printf("%d\n",answer);
}
}
return ;
}
Problem E---zoj 4062 Plants vs. Zombies
(补)解题思路:典型的最大化最小值,二分解法再加个贪心,详解看代码。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+;
int T,n;LL m,l,r,mid,a[maxn],d[maxn];
bool check(LL x){
///二分总防御值,对于固定的防御值x,显然花园里的每个植物都要不小于x,因此贪心地从左往右寻找每一个防御值小于x的植物,对它和它右侧的植物反复浇水。
LL step=;
for(int i=;i<n;++i)d[i]=x/a[i]+(x%a[i]?1LL:0LL);///计算每个至少需要浇水的次数
for(int i=;i<n;++i){
if(!d[i]){
if(i!=n-)step++;///如果最后一棵植物需要浇水的次数为0,说明其防御值不小于当前x,则无需计数
}else{
step+=d[i]*2LL-1LL;///累加从i-1走到i这1步+浇完第i棵植物后花费的总步数为2*d[i]-1
d[i+]-=(d[i]-1LL);///第i+1棵植物需要浇水的次数要减去(d[i]-1)
if(d[i+]<)d[i+]=0LL;///如果d[i+1]<0,说明下一棵植物的防御值早已大于x,下次只需给它浇一次水(贪心向右移动一步)即可
}
if(step>m)return false;///如果所走步数超过m,则直接返回0,找较小的答案x
}
return true;
}
int main(){
while(~scanf("%d",&T)){
while(T--){
scanf("%d%lld",&n,&m);
for(int i=;i<n;++i)scanf("%lld",&a[i]);
l=1LL,r=1e18;
while(l<=r){///[l,r],退出条件是l>r,即l-1==r
mid=(l+r)>>;
if(check(mid))l=mid+1LL;///还有满足条件的最小值,继续最大化
else r=mid-1LL;///不满足条件,往左找
///cout<<l<<' '<<r<<endl;
}
printf("%lld\n",l-);///l-1相当于r,因为l会不断被最大化,直到超过r,则可以取l-1或者r就是最大化最小值答案
}
}
return ;
}
Problem J---zoj 4067 Books
解题思路:没有理解好题意,因此赛场上丧心病狂调了2小时的bug,罚时巨多QWQ,其实就是个简单的贪心=_=。题意:DreamGrid带的钱会在1~n本书中从前往后进行挑选,如果当前剩余的钱不小于第i本书的价格,那么他就一定会买这本书,并且用剩余的钱减去第i本书的价格,直到买完m本书,否则就跳过不买第i本书籍。首先要明确的一点:从其往后有序挑选!!!分三种情况:①当m==n时,显然为"Richman";②当m<cnt_0时,此时可以买比m多的书籍,显然为"Impossible";③当m>cnt_0时,首先肯定会挑选cnt_0个价格为0的书籍,然后从前往后在价格不为0的书籍里面贪心挑选(m-cnt_0)本书籍,再加上后面不为0的最小价格-1即为DreamGrid可带的最多零钱。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL ans;//注意用long long
const int inf=0x3f3f3f3f;
const int maxn=1e5+;
int T,n,m,cnt_0,pos,mina,s[maxn];
int main(){
while(cin>>T){
while(T--){
cin>>n>>m;cnt_0=;
for(int i=;i<n;++i)cin>>s[i],cnt_0+=s[i]?:;//统计0的个数
if(m==n)puts("Richman");
else if(cnt_0>m)puts("Impossible");//如果0的个数大于m,肯定可以买更多的书籍,显然此时为不可能
else{
m-=cnt_0,mina=inf,pos=,ans=;//m为剩下要挑选的本数
while(m)s[pos]?ans+=s[pos++],m--:pos++;//贪心选择价格不为0的m本,然后在后面选择一本最小的价格(不为0)-1加上来即为最优答案
for(int i=pos;i<n;++i)//从连续选择pos个不为0的数后,再从后面选择不为0的最小价格
if(s[i])mina=min(mina,s[i]);
cout<<(ans+=mina-)<<endl;
}
}
}
return ;
}
Problem M---zoj 4070 Function and Function
解题思路:签道题,注意:输入的x为0时要单独考虑。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int T,x,k,s[]={,,,,,,,,,};
int g(int y){
int ans=;
while(y){ans+=s[y%];y/=;}
return ans;
}
int main(){
while(~scanf("%d",&T)){
while(T--){
scanf("%d%d",&x,&k);
if(!x)x=k&?:;//x为0要单独考虑
else{
for(int i=;i<=k&&x;++i){
x=g(x);
if(!x){x=(k-i)&?:;break;}
}
}
printf("%d\n",x);
}
}
return ;
}
2018 ACM-ICPC亚洲区域赛(青岛)的更多相关文章
- 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)
队名:Unlimited Code Works(无尽编码) 队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...
- Known Notation括号匹配类问题(2014年ACM/ICPC 亚洲区域赛牡丹江)
题意: 给你数字或 * 的串,你可以交换一个*和数字.在最前面添1.在一个地方插入*,问你使串满足入栈出栈的(RNP)运算法则. 思路: 引用:https://blog.csdn.net/u01158 ...
- Digit sum (第 44 届 ACM/ICPC 亚洲区域赛(上海)网络赛)进制预处理水题
131072K A digit sum S_b(n)Sb(n) is a sum of the base-bb digits of nn. Such as S_{10}(233) = 2 + 3 ...
- 第42届亚洲区域赛青岛站(2017icpc青岛)经验总结以及一些感想
上一次写这种东西还是天梯赛,当时打完心里也是挺激动的,然后我们队也没有去参加省赛,但是过了一段时间我还是从那里面恢复了出来.因为我当时确实还是很菜的,当时连个暴力都不会,看着自己仅过的那些百度的题目确 ...
- 2014ACM/ICPC亚洲区域赛牡丹江站汇总
球队内线我也总水平,这所学校得到了前所未有的8地方,因为只有两个少年队.因此,我们13并且可以被分配到的地方,因为13和非常大的数目.据领队谁oj在之上a谁去让更多的冠军.我和tyh,sxk,doub ...
- 2018 ACM-ICPC 亚洲区域赛青岛现场赛 —— Problem F. Tournament
题面:http://acm.zju.edu.cn/contest-materials/qd2018/qd2018_problems.pdf 题意: n个骑士决斗K轮 要求是每个骑士只能跟另外一个骑士决 ...
- 【2018 ICPC亚洲区域赛南京站 A】Adrien and Austin(博弈)
题意: 有一排n个石子(注意n可以为0),每次可以取1~K个连续的石子,Adrien先手,Austin后手,若谁不能取则谁输. 思路: (1) n为0时的情况进行特判,后手必胜. (2) 当k=1时, ...
- 【2018 ICPC亚洲区域赛徐州站 A】Rikka with Minimum Spanning Trees(求最小生成树个数与总权值的乘积)
Hello everyone! I am your old friend Rikka. Welcome to Xuzhou. This is the first problem, which is a ...
- 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)
Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...
- 2014ACM/ICPC亚洲区域赛牡丹江现场赛总结
不知道怎样说起-- 感觉还没那个比赛的感觉呢?如今就结束了. 9号.10号的时候学校还评比国奖.励志奖啥的,由于要来比赛,所以那些事情队友的国奖不能答辩.自己的励志奖班里乱搞要投票,自己又不在,真是无 ...
随机推荐
- NameNode和JobTracker的网络接口
Hadoop快速入门 http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html
- POJ1077 Eight —— 正向BFS
主页面:http://www.cnblogs.com/DOLFAMINGO/p/7538588.html 代码一:以数组充当队列,利用结构体中的pre追溯上一个状态在数组(队列)中的下标: #incl ...
- 使用JavaScript访问XML数据
在本篇文章中,我们将讲述如何在IE中使用ActiveX功能来访问并解析XML文档,由此允许网络冲浪者操纵它们.这一网页将传入并运行脚本的初始化.你一定确保order.xml文档与jsxml.html在 ...
- 安装程序工具 (Installutil.exe)
网址:https://msdn.microsoft.com/zh-cn/library/50614e95(VS.80).aspx 安装程序工具 (Installutil.exe) .NET Fram ...
- 并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和
题目大意 设d(x)为x的约数个数,\(t\)组询问,给定\(n,m\)(\(t,m,n\leq5*10^4\)),求$ \sum^n_{i=1}\sum^m_{j=1}d(i*j)$ 题解 假设\( ...
- HihoCoder1084: 扩展KMP(二分+hash,求T串中S串的数量,可以失配一定次数)
时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 你知道KMP吗?它是用于判断一个字符串是否是另一个字符串的子串的算法.今天我们想去扩展它. 在信息理论中,在两个相同长度的字 ...
- c/c++内存机制(一)(原)
一:C语言中的内存机制 在C语言中,内存主要分为如下5个存储区: (1)栈(Stack):位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效. (2)堆(Heap):由程 ...
- bzoj2878 [Noi2012]迷失游乐园——概率期望DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 这个博客写得很好:https://www.cnblogs.com/qt666/p/72 ...
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时8&&9
课时8 反向传播与神经网络初步(上) 反向传播在运算连路中,这是一种通过链式法则来进行递推的计算过程,这个链路中的每一个中间变量都会对最终的损失函数产生影响. 链式法则通常包含两部分,局部梯度和后一层 ...
- poj1163 【记忆化搜索·水】
题意: 一个这样的三角形,他可以往下的左或者往下的右走.求一个在最后一行的最大. 思路: 额...就是搜一下..记录一下...肯定有重合的情况. code- //#include <bits/s ...