循环移动

(cyclic.cpp/c/pas)

(1s/256M)

问题描述

给出一个字符串S与N个操作。每个操作用三元组(L, R, K)进行描述:操作将字符串第L个到第R个位置构成的子串循环移动K次。一次循环移动就是将字符串最后的这个字符移动到第一位,其余的字符顺次后移。

例如,对于字符串abacaba,操作(L=3, R=6, K=1)后得到的字符串即为abbacaa。

求出在N个操作后得到的字符串。

输入格式(cyclic.in)

第一行一个字符串S。

第二行一个整数N,代表操作的总数。

接下来N行每行三个数L,R,K,每行代表一个操作。

输出格式(cyclic.out)

一行一个字符串,代表N个操作后的字符串。

样例输入

abbacaa

2

3 6 1

1 4 2

样例输出

ababaca

数据范围与约束

设|S|为字符串S的长度。

对于30%的数据,|S|<=100, N<=100, K<=100

对于100%的数据,|S|<=10000, N<=300, K<=1000,000,1<=L<=R<=|S|

#include<cstdio>
#include<cstring>
#define N 10010
using namespace std;
char s[N],tmp[N];
int n,l,r,k,t,len;
int main()
{
freopen("cyclic.in","r",stdin);
freopen("cyclic.out","w",stdout);
scanf("%s",s+);
len=strlen(s+);
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d",&l,&r,&k);
k%=(r-l+);
if(!k) continue;
t=l;
for(int i=r-k+;i<=r;i++) tmp[t++]=s[i];
for(int i=l;i<=r-k;i++) tmp[t++]=s[i];
for(int i=l;i<=r;i++) s[i]=tmp[i];
}
printf("%s",s+);
}

阅读计划

(book.cpp/c/pas)

(1s/256M)

问题描述

暑假到了,Rick制定了一个长达M天的阅读计划。他一共有N本书,从1至N进行标号;Rick将它们从上至下摞成一堆。他每天都会读一本书,假设他要读编号为X的书,他会按照以下步骤:

1. 将这本书上方的所有书搬起来

2. 将这本书拿出来

3. 将搬起来的书摞回去

4. 看完后把这本书放到顶端

每本书都会有各自的重量,Rick不希望搬起太过重的书。于是他希望能重新安排这N本书的顺序,使得读完M本书之后,搬书的重量之和最小。

输入格式(book.in)

第一行两个整数N与M,分别代表书的数量和阅读的天数。

第二行N个整数,代表每本书的重量。

第三行M个整数,代表每天要读的书的编号。

输出格式(book.out)

一行一个整数,代表最小的重量之和。

样例输入

3 5

1 2 3

1 3 2 3 1

样例输出

12

数据范围与约束

对于30%的数据,N<=10.

对于100%的数据,2<=N<=500, 1<=M<=1000, 每本书重量不超过100.

00%的数据,|S|<=10000, N<=300, K<=1000,000,1<=L<=R<=|S|

贪心:按书的第一次阅读顺序摆放

#include<cstdio>
#include<cstring>
using namespace std;
int n,m,cnt,x,ans;
int weight[],read[];
int first[];
bool v[];
int main()
{
freopen("book.in","r",stdin);
freopen("book.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&weight[i]);
for(int i=;i<=m;i++)
{
scanf("%d",&x);
read[i]=x;
if(!first[x])
{
first[x]=i;
ans+=cnt;
cnt+=weight[x];
}
}
for(int i=;i<=m;i++)
if(first[read[i]]!=i)
{
for(int j=i-;j && read[j]!=read[i];j--)
if(!v[read[j]]) ans+=weight[read[j]],v[read[j]]=true;
memset(v,,sizeof(v));
}
printf("%d",ans);
}

树集

(set.cpp/c/pas)

(1s/256M)

问题描述

给出一棵N个节点的树,每个节点上都附有一个权值ai。现在Ann想从中选出若干个节点,满足以下条件:

1. 至少选出一个节点

2. 节点之间是连通的

3. 设节点中权值最大的为ap,最小的为aq,则需要满足ap-aq不大于某个定值D。

Ann想知道有多少种选择的方式?结果对1,000,000,007取模即可。

输入格式(set.in)

第一行包含两个整数D, N,分别代表定值D与节点总数N。

第二行包含N个整数ai,分别代表每个点的权值。

接下来N-1行,每行包含两个数u, v,代表树中节点u与节点v是相连的。

输出格式(set.out)

一个整数,代表方案数模1,000,000,007的结果。

样例输入

1 4

2 1 3 2

1 2

1 3

3 4

样例输出

8

样例解释

8个选择方式为:{1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {3, 4}, {1, 3, 4}。

数据范围与约束

对于30% 的数据,1<=n<=10;

对于另外的30% 的数据,d=2000.

对于100% 的数据,0<=d<=2000, 1<=n<=2000, 1<=ai<=2000.

树形DP,如何取消d的限制?

枚举x作为选的点集中权值最小的点,

那么可以选的点的点权范围:a[x]——a[x]+d

小细节:如果点权相同,那么规定只能由编号小的走到编号大的

#include<vector>
#include<cstdio>
#define N 2001
#define mod 1000000007
using namespace std;
int d,n,l,r,ans,rt;
int a[N],dp[N];
vector<int>e[N];
void dfs(int now,int last)
{
dp[now]=;
int siz=e[now].size();
for(int i=;i<siz;i++)
{
if(e[now][i]==last) continue;
if(a[e[now][i]]<l || a[e[now][i]]>r || a[e[now][i]]==l&&e[now][i]<rt) continue;
dfs(e[now][i],now);
dp[now]=1ll*dp[now]*(dp[e[now][i]]+)%mod;
}
}
int main()
{
freopen("set.in","r",stdin);
freopen("set.out","w",stdout);
scanf("%d%d",&d,&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
int u,v;
for(int i=;i<n;i++)
{
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
for(int i=;i<=n;i++)
{
rt=i;
l=a[i];
r=a[i]+d;
dfs(i,);
ans=(ans+dp[i])%mod;
}
printf("%d",ans);
}

2017 济南综合班 Day 6的更多相关文章

  1. 2017 济南综合班 Day 7

     a 两个指针L.R R开始指向恰好[R,n]有不超过k个逆序对的地方 随着L的右移,R指针只会右移 逆序对有2部分 1.L左侧与其他位置形成的逆序对 2.R右侧与其他位置形成的逆序对 用树状数组分别 ...

  2. 2017 济南综合班 Day 5

    毕业考试 (exam.cpp/c/pas) (1s/256M) 问题描述 快毕业了,Barry希望能通过期末的N门考试来顺利毕业.如果他的N门考试平均分能够达到V分,则他能够成功毕业.现在已知每门的分 ...

  3. 2017 济南综合班 Day 4

    T1 外星人 二维前缀和 #include<cstdio> #define N 1001 using namespace std; bool v[N][N]; int sum[N][N]; ...

  4. 2017 济南综合班 Day 3

    T1  黑化 题意: 求一个字符串是否可能包含另一个字符串 字符串中的?可以匹配任意字母 可能输出 God bless You! 一定不可能 输出 Game Over! 计算fail数组时,fail数 ...

  5. 2017 济南综合班 Day 2

    木棍(stick) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有很多木棍,具体的,总共有n根,且每根木棍都有一个长度.为了方便起见,我们可以用一个正 ...

  6. 2017 济南综合班 Day 1

    送分题(songfen) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK喜欢干一些有挑战的事,比如说求区间最大子段和.它知道这个题目有O(n)的做法.于 ...

  7. 2017 济南精英班 Day1

    不管怎么掰都是n*m-1 #include<cstdio> using namespace std; int main() { freopen("bpmp.in",&q ...

  8. JavaScript脚本语言基础(四)

    导读: JavaScript和DOM DOM文档对象常用方法和属性 DOW文档对象运用 JSON数据交换格式 正则表达式 1.JavaScript和DOM [返回] 文档对象模型(Document O ...

  9. JeeSite(2):导入数据,进入系统

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/50954485 未经博主同意不得转载. 博主地址是:http://blog.csd ...

随机推荐

  1. Bcp 使用心得【转】

    在做这方面研究的时候,的确遇到了不少麻烦. 首先在做bcp的时候,要开通大数据量访问权限 一.基于sql语句的导入导出 如果是基于SQL语句的导入导出,需要使用存储过程“master..xp_cmds ...

  2. CentOS Openvpn搭建以及 linux&&windows客户端的连接

    本文参考:http://www.centoscn.com/CentosServer/test/2014/1120/4153.html 一. Server安装准备     (CentOS release ...

  3. 2019-1-92.4G射频芯片培训资料

    2019-1-92.4G射频芯片培训资料 培训 RF 小书匠  欢迎走进zozo的学习之旅. 2.4G芯片选型 2.4G芯片开发 Q&A 2.4G芯片选型 芯片类型 soc 防盗标签2.4G无 ...

  4. Uncaught Error: Syntax error, unrecognized expression: |117的js错误

    117指的是js代码在浏览器运行时的出错的行号 var  a="117|117" 前面的错误是由于有特殊符号“|”,用$("txtId"+a).val();去取 ...

  5. [zt]手把手教你写对拍程序(PASCAL)

    谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...

  6. CWnd类虚函数的调用时机、缺省实现

    MFC(VC6.0)的CWnd及其子类中,有如下三个函数: class CWnd : public CCmdTarget{    public:        virtual BOOL PreCrea ...

  7. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

  8. 使用cookies模拟登陆

    http://blog.csdn.net/a1099439833/article/details/51918955 使用cookies会话跟踪,保持cookies访问,对于cookies会失效的问题可 ...

  9. YaoLingJump开发者日志(八)V1.1版本完成

    跳跃吧瑶玲下载连接 官网下载(网站服务器不支持10M以上的文件上传-_-||) 百度网盘下载 介绍   忙里偷闲,把之前的工作整理了一下完成V1.1版本,下面是更新! (1)去掉了积分榜. (2)增加 ...

  10. centOS 6.5命令方式配置静态IP

    想自己做个centOS玩一下,然后通过FTP访问操作,首先查看是否开启了SSH,命令如下: rpm -qa | grep ssh 这个时候看到的是centOS的ssh已经打开!要是通过FTP工具访问还 ...