套题T1

间隙妖怪(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

#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+1,&m);
    int n=strlen(s+1);
    for(int i=1;i<=m;++i)
    {
        scanf("%d",&tmp);
        a[tmp]^=1;
        a[n-tmp+2]^=1;
    }
    tmp=0;
    for(int i=1;i<=n;++i)
    {
        tmp^=a[i];
        if(tmp)    ans[i]=s[n-i+1];
        else ans[i]=s[i];
    }
    ans[n+1]=‘\0‘;
    cout<<ans+1;
    puts("");
    fclose(stdin);fclose(stdout);
    return 0;
}

心疼蠢蠢的自己



数据控制(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=0;
int vnow;
int main()
{
    freopen("loading.in","r",stdin);
    freopen("loading.out","w",stdout);
    cin>>vs>>vd>>t>>limit;

    for(int i=1;i<=t;++i)
    {
/*        if(vnow+limit<=vd)
        {
            vnow+=limit;
            ans+=vnow;
        }
        else
        {
            */
            int j=i-1,k=t-i;
            vnow=min(vs+j*limit,vd+k*limit);
            ans=vnow+ans;
//            cout<<vnow<<" ";
//        }
    }
    cout<<ans;
    puts("");
    fclose(stdin);fclose(stdout);
    return 0;
}

读起来丑丑的代码



没有人双色球(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=0;
long long ans=0;
char a[55];
stack<char>QAQ;
int main()
{
    freopen("ball.in","r",stdin);
    freopen("ball.out","w",stdout);
    scanf("%d%s",&n,a+1);
    qiushu=n;
    for(int i=n;i>=1;--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 0;
}

智障写的模拟

#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[55];
    scanf("%d%s",&n,a);
    int pow=1;
    long long sum=0;
    for (int i=0;i<n;++i)
    {
        if (a[i]==‘B‘)sum+=pow;
        pow<<=1;
    }
    printf("%d",sum);
    puts("");
    fclose(stdin);fclose(stdout);
    return 0;
}

二进制版

//正解留空位



弱弱的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

      

时间: 2024-10-23 05:52:03

套题T1的相关文章

Educational Codeforces Round 15 套题

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

2017年8月14日套题记录 | 普及组

写在前面 今天登洛谷发现离Noip剩下88天了??(虽然看起有点久),然后觉得似乎水了一个暑假什么也没做(虽然学了点数据结构和一些奇奇Gaygay的东西),于是打开题库发现去年Long Happy的集训套题我似乎没有提交过,那就一天一套题,顺便码个题解+心得(雾? T2.传作业 题目描述 某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里.由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学.已知某十三与组长之间有N个他熟悉的同学,并

应试教育:你是在“套题”还是在“解决问题”?

?为什么当初会采用"背题型"的方式? ?"背题型"的局限性在哪? ?建构"知识体系"优势在哪? ?"题海战术"的认知错误 ?学习和考试的本质 声明:此文纯属个人学习方法总结. 1.为什么当初会采用"背题型"的方式? 以前上了高中,由于身边学霸太多,为了急于缩短与他们之间的天壤之别,总想着调整自己的学习方法. 本来自己就没什么学习方法,加上老师布置下做不完的题目,况且时常听到"题海战术"的

套题T6

过节(festival.cpp/c/pas) Dxy帮老师们过教师节的时候需要购买礼物.货架上有n 种礼物,每种礼物有不同的个数.每种礼物有价值和花费两种属性,帮他算出最大可以得到的价值.M是带的钱数有多少 Input: 第一行两个数n,m 第2到n+1行:每行三个数a,b,c,表示一种礼物的个数,花费和价值.   Output: 最大可得价值.   样例输入: 1  1 1  1  1   样例输出: 1 a*b(mod.cpp/c/pas) 没错dxy的题目就是这么简单. 输入: 第一行一个

套题T4

Problem 1 无聊的gcd(gcd.c/cpp/pas) 话说出题人不会被查水表吧. 简单的问题描述:从N个正整数里面取出K个数的最大公因数最大是多少.(请将答案乘上k之后输出哦,谢谢合作.) 输入格式 第一行两个正整数N,K. 第二行n个正整数 输出格式 输出一个正整数表示最大的最大公因数. 样例输入 3 1 1 2 3 样例输出 3 数据说明 对于30%的数据,保证k≤n≤20. 对于50%的数据,保证输入中所有数小于5000. 对于100%的数据,保证输入中所有数小于500000,k

[暑假集训]区域赛套题集

2014-07-03 [浙江第11届省赛]ZOJ 3785 What day is that day?  (打表找循环节) [暑假集训]区域赛套题集

套题T5//各种树

树(tree) [题目描述] 方方方种下了三棵树,一年后,第一棵树长出了n个节点. 方方方会向你提出m个询问,每个询问给出两个数i,j,你需要回答i号节点和j号节点在树上的距离. [输入数据] 第一行两个整数n,m.接下来n-1行每行两个整数a,b表示一条边.接下来m行每行两个整数i,j表示询问. [输出数据] m行,每行一个整数表示答案. [样例输入] 3 2 1 2 1 3 3 2 1 1 [样例输出] 2 0 [数据范围] 对于30%的数据,n,m<=1000. 对于100%的数据,n,m

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

写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛之一了!(其中G.I和D题简直是好题中的好题!) 由于网上没有任何这套题的题解,我每道题都绞尽脑汁想了好久(尤其是D题.I题和H题证明),在此认认真真的写一篇博客,也真心希望好题能被更多的人发现和赞美. 题目概述 题目 思维难度  推荐指数 考点 A 3  ☆☆☆☆ 最长上升子序列 B 暂留坑,>7

20171108 模拟题 T1

T1 为什么要写这个题呢? 我只是想说:链表也能做!! QAQAQ 可是……细节什么的考场写的好晕…… (其实我不想解释代码了QAQAQ Codes: #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; const int N = 100000 + 10; char s[N]; int ans,ans1,ans2; int