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亚洲区域赛(青岛)的更多相关文章

  1. 2015 ACM / ICPC 亚洲区域赛总结(长春站&北京站)

    队名:Unlimited Code Works(无尽编码)  队员:Wu.Wang.Zhou 先说一下队伍:Wu是大三学长:Wang高中noip省一:我最渣,去年来大学开始学的a+b,参加今年区域赛之 ...

  2. Known Notation括号匹配类问题(2014年ACM/ICPC 亚洲区域赛牡丹江)

    题意: 给你数字或 * 的串,你可以交换一个*和数字.在最前面添1.在一个地方插入*,问你使串满足入栈出栈的(RNP)运算法则. 思路: 引用:https://blog.csdn.net/u01158 ...

  3. 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 ...

  4. 第42届亚洲区域赛青岛站(2017icpc青岛)经验总结以及一些感想

    上一次写这种东西还是天梯赛,当时打完心里也是挺激动的,然后我们队也没有去参加省赛,但是过了一段时间我还是从那里面恢复了出来.因为我当时确实还是很菜的,当时连个暴力都不会,看着自己仅过的那些百度的题目确 ...

  5. 2014ACM/ICPC亚洲区域赛牡丹江站汇总

    球队内线我也总水平,这所学校得到了前所未有的8地方,因为只有两个少年队.因此,我们13并且可以被分配到的地方,因为13和非常大的数目.据领队谁oj在之上a谁去让更多的冠军.我和tyh,sxk,doub ...

  6. 2018 ACM-ICPC 亚洲区域赛青岛现场赛 —— Problem F. Tournament

    题面:http://acm.zju.edu.cn/contest-materials/qd2018/qd2018_problems.pdf 题意: n个骑士决斗K轮 要求是每个骑士只能跟另外一个骑士决 ...

  7. 【2018 ICPC亚洲区域赛南京站 A】Adrien and Austin(博弈)

    题意: 有一排n个石子(注意n可以为0),每次可以取1~K个连续的石子,Adrien先手,Austin后手,若谁不能取则谁输. 思路: (1) n为0时的情况进行特判,后手必胜. (2) 当k=1时, ...

  8. 【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 ...

  9. 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)

    Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...

  10. 2014ACM/ICPC亚洲区域赛牡丹江现场赛总结

    不知道怎样说起-- 感觉还没那个比赛的感觉呢?如今就结束了. 9号.10号的时候学校还评比国奖.励志奖啥的,由于要来比赛,所以那些事情队友的国奖不能答辩.自己的励志奖班里乱搞要投票,自己又不在,真是无 ...

随机推荐

  1. mysql创建 存储过程 并通过java程序调用该存储过程

    create table users_ning(id primary key auto_increment,pwd int); insert into users_ning values(id,123 ...

  2. Linux 常用命令 (备忘)

    查看linux版本信息 uname -r cat /proc/version

  3. Spring Base

    1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书<Expert one-on-one J2EE Design and Deve ...

  4. code[VS] 1297 硬币

    题目描写叙述 Description 我们知道即使是同一种面值的硬币,它们的重量也有可能不一样,由于它受到很多因素的影响,包含制造工艺和流程上的.可是不论什么一种面值的硬币的重量总是处于某个特定范围之 ...

  5. Codeforces Round #352 (Div. 2) C. Recycling Bottles

      C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  6. 常用: JS 获取浏览器窗口大小

    // 获取窗口宽度 if (windows.innerWidth) winWidth = windows.innerWidth; else if ((document.body) && ...

  7. 序列流、对象操作流、打印流、标准输入输出流、随机访问流、数据输入输出流、Properties(二十二)

    1.序列流 * 1.什么是序列流 * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推.* 2.使用方式 * 整合两个 ...

  8. IntelliJ IDEA 注册码 有效期截止于2018/10/14

    来源: http://idea.lanyus.com/ IntelliJ IDEA 注册码: EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW ...

  9. vmware9虚拟机通过NAT上网方式设置

    vmware虚机上网的网络连接方式有bridge.NAT.Host-only等,如果对这个不了解的可以学习这篇文章http://wangchunhai.blog.51cto.com/225186/38 ...

  10. CentOS设置代理

      假设我们要设置代理为 IP:PORT1.网页上网网页上网设置代理很简单,在firefox浏览器下 Edit-->>Preferences-->>Advanced--> ...