间隙妖怪(gap.cpp/c/pas)

题目描述:

八云紫是幻想乡的间隙妖怪。她喜欢和八云橙玩一个叫做翻转的游戏。具体规则如下,八云紫对一个长度为N字符串做M次翻转操作,每次操作给定一个X,八云紫将X到N-X之间的字符串翻转。她最喜欢的就是在做M次操作之前询问八云橙这个字符串会变成什么样。然而愚钝的橙一般是答不出来的。为了让橙不在紫妈面前丢脸,你能够帮帮她吗?

输入数据:

第一行:一个字符串(即原字符串)

第二行:一个整数M,表示有M次操作

第三行:M个整数,表示每次操作的X

输出数据:

一个字符串,表示M次操作之后的字符串。

输入样例:

abcdef
1
2

输出样例:

aedcbf

 

 

数据范围:

对于50%数据:M<=5000,字符串长度<=5000

对于100%数据:M<=200000,字符串长度<=200000


字符串处理,可以联想到用异或^来处理字符串反转

因为反转两遍相当于没转,所以得到了以下的东西QAQ

//二进制下异或不同的为1,相同的为0

//NOIP不让用这玩意儿

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 200005
using namespace std; int a[maxn],tmp,m;
char s[maxn],ans[maxn]; int main()
{
freopen("gap.in","r",stdin);
freopen("gap.out","w",stdout);
scanf("%s%d",s+,&m);
int n=strlen(s+);
for(int i=;i<=m;++i)
{
scanf("%d",&tmp);
a[tmp]^=;
a[n-tmp+]^=;
}
tmp=;
for(int i=;i<=n;++i)
{
tmp^=a[i];
if(tmp) ans[i]=s[n-i+];
else ans[i]=s[i];
}
ans[n+]='\0';
cout<<ans+;
puts("");
fclose(stdin);fclose(stdout);
return ;
}

心疼蠢蠢的自己

正解

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int len,n,a[];
//n<1 ???
char s[],p[];
int main(){
freopen("gap.in","r",stdin);freopen("gap.out","w",stdout);
scanf("%s",s+);
len=strlen(s+);
scanf("%d",&n);
for(int i=;i<=len;i++)p[i]=s[i];
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
x=min(x,len-x+);
a[x]++;
}
int q=;
for(int i=;i<=len/+;i++){
q+=a[i];
if(q%==){
s[i]=p[i];
s[len-i+]=p[len-i+];
}
else{
s[i]=p[len-i+];
s[len-i+]=p[i];
}
}
for(int i=;i<=len;i++)printf("%c",s[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return ;
}

%%% DXY


数据控制(loading.c/cpp/pas)

题目描述:

UUZsama为了控制妖梦的网速,专门设置了一个数据监控系统。这个系统的工作原理是这样的:每隔一段时间检查一次,如果网速超过限定速度,则掐断网络。得知这件事情的妖梦为了赶紧把新的电影下载完,就使用了一个奇怪的东西来解决这个事情,这个东西的特点是:每一秒,妖梦都可以使得当前网速增加或者减小,但是增加/减小的范围不能超过Limit(设变动前网速是v,则变动后网速Vt的范围是max(0,V-limit) <= Vt <= V+Limit )。现在知道第T秒的时候UUZ就要开始查网络了,为了保证以后还会有网络用,妖梦必须保证在第T秒的时候自己的网速是小于等于限定网速的。请问妖梦从现在到UUZ检查结束这段时间内最多能下载的电影的大小是多少?

输入描述:

第一行:两个整数,Vs,Vd 。 Vs表示当前网络速度,Vd表示UUZ的网络限定速度(单位均为MB/s)。

第二行:两个整数T,Limit。T表示第T秒的时候检查网络,Limit表示网速变动的最大值。

输出描述:

一个数字,表示UUZ检查结束后妖梦最多下的电影的大小(单位是MB)

样例输入:

5 6

4 2

样例输出:

26

样例解释:

第一秒:速度为5 MB/s,总大小为5MB

第二秒:速度为7 MB/s,总大小为12MB

第三秒:速度为8 MB/s,总大小为20MB

第四秒:速度为6 MB/s,总大小为26MB

幻想乡的网速是很快的哟!但是速度什么的都是整数的啊。

数据范围:

0 <= Vs,Vd <= 100

2 <= t <= 100

0 <= d <= 10


不知道为什么一开始一直觉得这个是dp……卡了好久

正解是贪心啦QAQ

在所有T时刻都<=Vd,在T-1就是能达到的最大的Vd+Limit,T-i就是能达到的最大的Vd+Limit*i,能达到的最大的Vd+Limit*i

满足递归的定义:从当前 到下一个时间最大的下载量就是这个区域的下载量;

这个就是转化成了很多个子问题,从下个时间到下下个时间,还是一个初始速度,到T为止每一段都是一样的。

有两种可能的情况:

①全加速也达不到Vd —>一直加速就行

②是要+然后-  —>对于每一个T-i,Vnowmax=Vd+Limit*i

然后一个个推就资磁了

Vnow=min( Vs+j*Limt, Vd+i*Limit )

//k为当前点 m为起点 j=k-m, i= T-k

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int vs,vd,limit,t;
int ans=;
int vnow;
int main()
{
freopen("loading.in","r",stdin);
freopen("loading.out","w",stdout);
cin>>vs>>vd>>t>>limit; for(int i=;i<=t;++i)
{
/* if(vnow+limit<=vd)
{
vnow+=limit;
ans+=vnow;
}
else
{
*/
int j=i-,k=t-i;
vnow=min(vs+j*limit,vd+k*limit);
ans=vnow+ans;
// cout<<vnow<<" ";
// }
}
cout<<ans;
puts("");
fclose(stdin);fclose(stdout);
return ;
}

读起来丑丑的代码


没有人双色球(ball.cpp/c/pas)

题目背景:

Nizilia原是一个国家的公主,小时候的她非常喜欢和国王的近臣Kating玩一种名字叫做双色球的游戏。有一天,Kating发动了叛乱,Nizilia被囚禁起来,看着父亲死在自己的面前,Nizilia心如刀绞,在度日如年的囚禁生活中,Nizilia靠破译一个锁来度日,只有打开这个锁,才有可能逃出去。。。。。。

题目描述:

这个锁的结构是一个栈。

这个栈内初始有n个红色和蓝色的小球,Nizilia需要按照以下规则进行操作:

  1. 只要栈顶的小球是红色的,将其取出,直到栈顶的球是蓝色
  2. 然后将栈顶的蓝球变成红色
  3. 最后放入若干个蓝球直到栈中的球数为n

以上3步骤为一次操作

如栈中都是红色球,则操作停止,请问最少几次操作后停止

输入格式:

第一行为一个整数n,表示栈的容量为n

第二行为一个字符串,第i个字符表示自顶向下的第i个球的颜色,R代表红色,B代表蓝色

输出格式:

一个整数表示操作数

样例输入:

样例1:

3

RBR

样例2:

4

RBBR

样例输出:

样例1:2

样例2:6

数据范围:

50%数据:n<=20

100数据:n<=50


总觉得这题似曾相识然而还是爆炸了

注意是自顶向下呀!样例给的是对称的不要过了就不测了QAQ

还有操作次数可能非常大于是要long long来记录

一轮三次(不满三次也算一次)才算一次操作

然后剩下的就是模拟了QAQ

有一种大概会T的非正解

还有另一种二进制的做法QAQ

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std; int n,qiushu,hongqiu=;
long long ans=;
char a[];
stack<char>QAQ;
int main()
{
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
scanf("%d%s",&n,a+);
qiushu=n;
for(int i=n;i>=;--i)
{
QAQ.push(a[i]);
if(a[i]=='R')hongqiu++;
}
while(n)
{
if(hongqiu==n)break;
while (QAQ.top()=='R')
{
QAQ.pop();
qiushu--;
hongqiu--;
}
if(QAQ.top()=='B')
{
QAQ.pop();
QAQ.push('R');
hongqiu++;
}
if(qiushu<n)
{
for(int i=qiushu;i<n;++i)
{
QAQ.push('B');
qiushu++;
}
}
ans++;
} cout<<ans;
puts(""); fclose(stdin);fclose(stdout);
return ;
}

智障写的模拟

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 200005
using namespace std; int main()
{
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
int n;
char a[];
scanf("%d%s",&n,a);
int pow=;
long long sum=;
for (int i=;i<n;++i)
{
if (a[i]=='B')sum+=pow;
pow<<=;
}
printf("%d",sum);
puts("");
fclose(stdin);fclose(stdout);
return ;
}

二进制版

正解是数学问题QAQ

第i个位置要是有一个蓝球,答案就+2的i-1次方

//是根据小数据推出来的结论不是公理


弱弱的DXY

题目描述

DXY太弱了,以至于他已经不知道要如何解决调整一个数列的使得他变成一个严格上升序列。

输入格式

第 1 行,1 个整数 N

第 2 行,N 个整数 A1,A2,...,AN

输出格式

1 个整数,表示最少需要修改的多少个数字,使得数列变成单调上升的序列。

样例输入

3

1 3 2

样例输出

1

数据:

对于50%的数据:N<=1000

对于100%的数据:N<=100000

保证所有输入整数<=2^63-1


由于数据比较弱所以可以直接写成最长上升子序列然后n-f[n]骗骗分(大雾)

正解的话是把位置i上的数字减去i,做不下降子序列就好了,不过普通dp会T要找nlogn的做法QAQ

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LiangJiaJun main
#define INF 1999122700
using namespace std;
int a[];
int unset[],n;
int cnt=;
int erfen(int x){
int l=,r=n,ans=;
while(l<=r){
int mid = (l+r) >> ;
if(unset[mid]>x)r=mid-;
else{
ans = mid;
l = mid + ;
}
}
return ans;
}
int LiangJiaJun(){
freopen("loser.in","r",stdin);freopen("loser.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
a[i]-=i;
}
for(int i=;i<=n+;i++)unset[i]=INF;
unset[]=a[];unset[]=-INF;
for(int i=;i<=n;i++){
int x=erfen(a[i])+;
unset[x]=min(a[i],unset[x]);
}
for(int i=;i<=n;i++)if(unset[i]!=INF)cnt=i;
cout<<n-cnt<<endl;
fclose(stdin);fclose(stdout);
return ;
}

      

套题T1的更多相关文章

  1. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  2. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  3. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  4. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  5. 【套题】qbxt国庆刷题班D2

    D2 今天的题感觉还是好妙的 T1 传送门 Description 现在有一张\(n\)个节点\(m\)条边的无向连通图\(G=(V,E)\),满足这张图中不存在长度大于等于3的环且图中没有重边和自环 ...

  6. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  7. JZM 的套题(暴力,DP)

    J Z M \rm JZM JZM 即将奔赴 N O I \rm NOI NOI 考场,为了让同学们赶上自己的千分之一水平,刻意出了两道水题给同学们练练. 1.曾经的代码 J Z M \rm JZM ...

  8. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...

  9. 套题 codeforces 360

    A题:Opponents 直接模拟 #include <bits/stdc++.h> using namespace std; ]; int main() { int n,k; while ...

随机推荐

  1. lnmp 下安装yaf

    须有配置好的环境 详情见:centos6.5下yum安装lnmp(适合刚入职的新手的方法) http://www.cnblogs.com/qzjpkfj/p/4211126.html 具体安装步骤详情 ...

  2. 【转】MyEclipse快捷键大全(绝对全)

    ref:http://www.douban.com/note/254195820/?type=like# ctrl+w 关闭单个窗口 F3 跳转到类.变量的声明 F11 运行上次程序 Ctrl + F ...

  3. 查看linux系统版本命令

    一.查看内核版本命令: 1) [root@SOR_SYS ~]# cat /proc/version Linux version 2.6.18-238.el5 (mockbuild@x86-012.b ...

  4. js学习笔记一数字

    js所有数值都用浮点数来表示 十六进制数字以0x或者0X为前缀,由0-9,a-f(大小写均可)之间字符构成,a-f对应的数值是10-15 八进制数字以数字0开始,其后跟随0-7之间的数字,严格来说,j ...

  5. Python脚本控制的WebDriver 常用操作 <十四> 处理button dropdown 的定位

    测试用例场景 模拟选择下拉菜单中数据的操作 Python脚本 测试用HTML代码: <html> <body> <form> <select name=&qu ...

  6. "=="和equals方法究竟有什么区别

    (单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, ...

  7. 让别人也可以访问你电脑上的ASP.NET MVC创建的网站

    最近在写一个网站,昨天刚写完,由于要和朋友一起测试,但是他电脑上没有环境,所以希望我在自己电脑上部署一下,让他直接通过浏览器来访问来测试,所以从昨晚到今天上午,通过各种搜索,终于搞定了. 先介绍一下我 ...

  8. ARPA

    ARPA是英文Advanced Research Projects Agency的缩写,代表美国国防部高级研究计划署.是美国国防部高级研究计划管理局因军事目的而建立的,开始时只连接了4台主机,这便是只 ...

  9. ios/mac/COCOA系列 -- UIALertVIew 学习笔记

    最近在学习ios开发,学习的书籍<ios7 Pragramming cookbook>,做笔记的目的以后方便查看.笔记形式是小例子,将书上的例子书写完整. UIAlertViewClass ...

  10. 简单的C#线程开发实例(隔一秒改变一下Label的Text)

    要实现的效果:点击按纽,窗口上的label上出现1~100数字的变化. 第一个实例(把窗口上的label上文字改成0): using System; using System.Windows.Form ...