间隙妖怪(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. 错误解决mysql - Event Scheduler: No data - zero rows fetched, selected, or processed

    当遇到一个NOT FOUND(无数据)的警告时,使用一个包含清除警告语句的条件句柄处理,就可以继续处理程序并退出句柄. 这个问题在MySQL5.6.3之后的版本已经解决了,所以该解决方法不是必要的. ...

  2. 版本控制器 (Svn,Git)

    Svn: 集中式版本控制器,首先开发者在开始新一天的工作之前必须从服务器获取代码,然后进入自己的分支开发,开发完成后把自己的分支合并到主分支上进行提交,解决冲突.所有的版本信息都放在服务器上.如果脱离 ...

  3. ASP.NET中的TextBox下划线

    看到园子里一位同行写的 http://www.cnblogs.com/xiaopeng84/archive/2007/04/10/707093.html 但是没有贴出效果图,自己练了一下,贴出代码和效 ...

  4. apache配置VirtualHost(windows)

    以下方式适合原生 Apache, XAMPP 和WAMP 套件. 1. 打开目录 {Apache2 安装目录}\conf\extra\, 找到 httpd-vhosts.conf 文件. 2. 仿照例 ...

  5. c位段

    假如程序表示四盏灯的开关状态灯只有开或关两种状态所以用1和0就可以表示为了节省内存就用一个二进制位表示一盏灯这里就定义位域用 a b c d 各表示一盏 这里定义时注意选用无符号类型位域允许用各种格式 ...

  6. swap分区添加

    首先你需要使用命令:dd 来创建一个swapfile,然后你需要使用mkswap命令在设备或者文件中创建一个Linux swap分区a) 使用root用户登陆b) 使用下面的命令创建一个2G的 Swa ...

  7. FastLoad错误 — RDBMS error 2634

    我们来看一下下面这条语句: BEGIN LOADING stu_flERRORFILES error_1, error_2;   如果此时已经存在error_1或error_2表,那么将会报错,信息如 ...

  8. Project Settings -> Editor 设置详解

    Default Behavior Mode (默认行为模式) 定义项目在导入Assets时的默认导入设置,当设置为3D模式时,Unity假设将导入的文件创建为纹理类型(如:PNG文件):当设置为2D时 ...

  9. Qt Script

    旧项目运行在Qt4.x上,要加上一个脚本逻辑,只能上Qt Script.(建议新项目使用QJSEngine) QT += script #include <QtScript> int cp ...

  10. 团队博客作业Week1 Team Homework #3软件工程在北航

    这次我们采访了一位大四的学姐,让她简单地谈了谈去年学习软件工程的经历和感受. 在完成软件工程大作业的过程中,由于计划安排与实际脱节,导致时间前松后紧,平均每周花在这门课上的时间大约有8个小时. 项目完 ...