太感动了
#2 thwfhk 240 (801ms) 100 100 40
 
又一张明信片,话说10月的怎么还没收到
 



P2246 SAC#1 - Hello World(升级版)

题目背景

一天,智障的pipapi正在看某辣鸡讲义学程序设计。

题目描述

在讲义的某一面,他看见了一篇文章。这篇文章由英文字母(大小写均有)、数字、和空白字符(制表/空格/回车)构成。

pipapi想起了他最近刚刚学会写的Hello World程序。他非常好奇,这篇文章中,“HelloWorld”作为子序列到底出现过多少次呢?

由于papapi是个智障,大小写对于他而言毫无区别;因此,“hEllOWorLD”这样的子序列也是可以接受的。O和W之间的空格是也是可以少的;也就是说,“HelloWorld”是可以的。根据标程的意思,就是没有空格,不用考虑空格的情况。

两个子序列相同当且仅当它们每一个字符所在的位置都相同。

由于答案可能很大,请输出结果对1000000007(10^9+7)的余数。

输入输出格式

输入格式:

输入包含若干行。这些行的内容共同构成一篇文章。

文章以EOF(文件结尾)结束。

输出格式:

输出仅包含一个整数,表示这篇文章中“Hello World”出现的次数。

输入输出样例

输入样例#1:

HhEeLlLlOoWwOoRrLlDd
输出样例#1:

1536
输入样例#2:

Gou Li Guo Jia Sheng Si Yi
Qi Yin Huo Fu Bi Qu Zhi
River can feed people
Also can race boats
Hall Ellen Ok Words locked
输出样例#2:

273

说明

记n为输入的文章的长度(字符数)。

对于20%的数据,n <= 20。

对于50%的数据,n <= 500。

对于所有的数据,15 <= n <= 500000。


直接秒掉,f[i][j]前i个0到j匹配方案数,滚掉第一维

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=5e5+,MOD=1e9+;
int n,m,p,mp[];
char c;
int f[]; int main(){
char s[]="helloworld";
for(int i=;i<;i++) mp[s[i]]=; while((c=getchar())!=EOF){
if((c>='A'&&c<'Z')||(c>='a'&&c<='z')){
if(c<'a') c+='a'-'A';
if(!mp[c]) continue;
//printf("%c\n",c);
if(c=='h') f[]++;
else if(c=='e') f[]+=f[],f[]%=MOD;
else if(c=='l'){
f[]+=f[],f[]%=MOD;
f[]+=f[],f[]%=MOD;
f[]+=f[],f[]%=MOD;
}else if(c=='o'){
f[]+=f[],f[]%=MOD;
f[]+=f[],f[]%=MOD;
}else if(c=='w') f[]+=f[],f[]%=MOD;
else if(c=='r') f[]+=f[],f[]%=MOD;
else if(c=='d') f[]+=f[],f[]%=MOD; }
}
printf("%d",f[]);
}



P2247 SAC#1 - ACOJ云评测计划

题目背景

本题由世界上最蒟蒻最辣鸡最撒比的SOL提供。

寂月城网站是完美信息教室的官网。地址:http://191.101.11.174/mgzd 。

题目描述

ACOJ的服务器简直是差到了一个令人发指的地步。于是SAC的出题人,也就是傻逼SOL,不得不强制要求每一个通过下载ACOJ软件包而搭建的分站,都为主站启动云端评测服务。

云评测服务是由网络来连接的。这样的网络连接是双向的;但是由于地理位置等因素的限制,并不是任意两台服务器都可以直接相连。ACOJ主站已经得到了可以直连的服务器的表,其中包含n个分站(包括主站)以及它们的m条连接情况,可以根据这个来分配各个分站的任务。

有一些分站的服主是SOL的脑残粉。他们会无条件地将他们的服务器提供给SOL。这些ACOJ分站称作“好站”。但是还有一些分站的服主是SOL黑。他们虽然拿到了ACOJ的服务端,但是并不愿意为SOL提供资源,于是利用黑科技关掉了云服务。也就是说,虽然主站仍然认为这些站点存在,但是它们不会起到任何作用——既不能传递通信,也不能进行评测。它们称作“坏站”。

经过千辛万苦的调查,SOL确定了ACOJ云评测系统中有最多k个坏站存在,而且这k个坏站似乎会使得ACOJ的云网络不再联通!大危机!

但是SOL太弱智了,并不能确定是哪k个。于是他请你来帮他找出任意一组可能会使得网络不再联通的k个站点,以便加强防范。

输入输出格式

输入格式:

输入包含m+1行。

第1行3个整数n、m、k。

接下来m行,每行两个整数a、b,表示标号为a和b的站点可以直接相连。

输出格式:

输出包含1行。

不超过k个整数,表示能够将原图割开的任意一组节点组合。

因为使用了Special Judge,所以节点的顺序并不用担心。只需要满足能够割开原图即可。

如果不存在这样的站点集合,输出“How oversuspicious you are, SOL!”;如果网络不存在任何坏站时本来就无法连通,输出“Poor SOL!”。

输入输出样例

输入样例#1:

4 4 2
1 2
2 3
3 4
4 1
输出样例#1:

1 3
输入样例#2:

4 6 2
1 2
2 3
3 4
4 1
1 3
2 4
输出样例#2:

How oversuspicious you are, SOL!
输入样例#3:

4 0 2
输出样例#3:

Poor SOL!

说明

对于20%的数据,n <= 15。

对于另外20%的数据,n <= 100,k=1。

对于另外20%的数据,n <= 100,k=2。

对于100%的数据,3 <= n <= 500,k <= 3,n-k >= 2,云网络不存在自环和重边。


枚举再求割点

也可以每次重构图

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int N=505;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n,m,k,a,b;
struct edge{
int v,w,ne;
}e[N*N<<1];
int h[N],cnt=0;
inline void ins(int u,int v){
cnt++;
e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
cnt++;
e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;
} int dfn[N],low[N],dfc,scc,iscut[N],cv,nc;
void init(){
for(int i=0;i<=n;i++) dfn[i]=low[i]=iscut[i]=0;
dfc=scc=cv=0;
}
void dfs1(int u,int fa){ nc++;
dfn[u]=low[u]=++dfc;
int child=0;
for(int i=h[u];i;i=e[i].ne){
int v=e[i].v;
if(!dfn[v]){
child++;
dfs1(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]) iscut[u]=1;
}else if(v!=fa) low[u]=min(low[u],dfn[v]);
}
if(fa==0&&child==1) iscut[u]=0;
if(iscut[u]) cv=u;
} void dfs2(int u,int fa,int del){
dfn[u]=low[u]=++dfc;
int child=0;
for(int i=h[u];i;i=e[i].ne){
int v=e[i].v; if(v==del) continue;
if(!dfn[v]){
child++;
dfs2(v,u,del);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]) iscut[u]=1;
}else if(v!=fa) low[u]=min(low[u],dfn[v]);
}
if(fa==0&&child==1) iscut[u]=0;
if(iscut[u]) cv=u;
} void dfs3(int u,int fa,int del1,int del2){
dfn[u]=low[u]=++dfc;
int child=0;
for(int i=h[u];i;i=e[i].ne){
int v=e[i].v; if(v==del1||v==del2) continue;
if(!dfn[v]){
child++;
dfs3(v,u,del1,del2);
low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]) iscut[u]=1;
}else if(v!=fa) low[u]=min(low[u],dfn[v]);
}
if(fa==0&&child==1) iscut[u]=0;
if(iscut[u]) cv=u;
}
int main(){
n=read();m=read();k=read();
for(int i=1;i<=m;i++){a=read();b=read();ins(a,b);} dfs1(1,0);
if(nc<n) {puts("Poor SOL!");return 0;}
else if(cv) {printf("%d",cv);return 0;} init();
if(k==2){
dfs2(2,0,1);
if(cv){printf("%d %d",1,cv);return 0;} for(int i=2;i<=n;i++){
init();
dfs2(1,0,i);
if(cv){printf("%d %d",i,cv);return 0;}
}
}else if(k==3){
dfs3(3,0,1,2);
if(cv){printf("%d %d %d",1,2,cv);return 0;}
for(int i=3;i<=n;i++){
init();
dfs3(2,0,1,i);
if(cv){printf("%d %d %d",1,i,cv);return 0;}
}
for(int i=2;i<=n;i++)
for(int j=i+1;j<=n;j++){
init();
dfs3(1,0,i,j);
if(cv){printf("%d %d %d",i,j,cv);return 0;}
}
}
puts("How oversuspicious you are, SOL!");
return 0;
}



P2248 分段

题目描述

给定你n个数,要求将它们分成若干连续的段。

要求:

  1. 有m对给定的数不能被分到同一段。

  2. 分出一个段的代价是,其中K和S均为给定的常数,而P则是该段中所有数的最大值,Q是该段中所有数的最小值。

  3. 要求你求出每段代价之和最小的分段方案。

输入输出格式

输入格式:

第一行两个正整数n和m,表示数的个数和不能共存的m对数。

第二行两个非负整数K和S,含义见题面。

第三行n个非负整数,即给定的n个数。

接下来m行每行2个数,表示这两个编号的数不能共存。(编号从1开始)

输出格式:

输出仅一行,表示最小的每段代价之和。

输入输出样例

输入样例#1:

5 2
3 1
2 3 12 14 16
2 3
3 1
输出样例#1:

11

说明

对于10%的数据,

对于30%的数据,

对于另外10%的数据,

对于另外30%的数据,

对于100%的数据,1≤m,n≤100000,0≤K,S,a_i≤100000,1≤pi,qi≤n,pi≠qi。


想了个O(n^2)的DP就打上了,特判了一下S==0,好像没什么用

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e5+;
const ll INF=1e18;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m,K,S,a[N],pos[N],p,q;
int mx[N][],mn[N][];
void initRMQ(){
for(int i=;i<=n;i++) mx[i][]=mn[i][]=a[i]; for(int j=;j<=;j++)
for(int i=;i+(<<j)-<=n;i++)
mx[i][j]=max(mx[i][j-],mx[i+(<<(j-))][j-]),
mn[i][j]=min(mn[i][j-],mn[i+(<<(j-))][j-]);
}
int rmq(int l,int r){
int k=log(r-l+)/log();
return max(mx[l][k],mx[r-(<<k)+][k])-min(mn[l][k],mn[r-(<<k)+][k]);
} ll f[N];
void dp(){
for(int i=;i<=n;i++){
f[i]=INF;int p=pos[i];
for(int j=i-;j>=p;j--){
f[i]=min(f[i],f[j]+K+(ll)S*(ll)rmq(j+,i));
p=max(p,pos[j]);
}
}
}
struct range{
int a,b;
bool operator <(const range &r)const{return b<r.b;}
}d[N];
void sol(){
int cnt=;
for(int i=;i<=n;i++) if(pos[i]) d[++cnt]=(range){pos[i],i}; sort(d+,d++cnt);
int last=,ans=;
for(int i=;i<=cnt;i++){
if(d[i].a<=last) continue;
last=d[i].b;
ans++;
}
printf("%d",ans*K+K);
} int main(){
n=read();m=read();K=read();S=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=m;i++){
p=read();q=read();
if(p>q) swap(p,q);
pos[q]=max(pos[q],p);
}
if(S==){
sol();
}else{
initRMQ();
dp();
printf("%lld",f[n]);
}
}

洛谷11月月赛round.1的更多相关文章

  1. 洛谷11月月赛round.2

    P3414 SAC#1 - 组合数 题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣 ...

  2. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  3. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  4. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  5. 洛谷11月月赛(284pts rank85)

    https://www.luogu.org/contestnew/show/12006 我是比赛完后在去写的 这是我第一次打洛谷月赛,之前一次是比赛完才去看而且写了第一题就没写后面的了 284分,太水 ...

  6. 【CSGRound2】逐梦者的初心(洛谷11月月赛 II & CSG Round 2 T3)

    题目描述# 给你一个长度为\(n\)的字符串\(S\). 有\(m\)个操作,保证\(m≤n\). 你还有一个字符串\(T\),刚开始为空. 共有两种操作. 第一种操作: 在字符串\(T\)的末尾加上 ...

  7. 洛谷10月月赛Round.1| P3400 仓鼠窝[单调栈]

    题目描述 萌萌哒的Created equal是一只小仓鼠,小仓鼠自然有仓鼠窝啦. 仓鼠窝是一个由n*m个格子组成的行数为n.列数为m的矩阵.小仓鼠现在想要知道,这个矩阵中有多少个子矩阵!(实际上就是有 ...

  8. 洛谷11月月赛题解(A-C)

    心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...

  9. 【LGR-065】洛谷11月月赛 III Div.2

    临近$CSP$...... 下午打了一发月赛,感觉很爽. 非常菜的我只做了前两题......然而听说前两题人均过...... 写法不优秀被卡到$#1067$...... T1:基础字符串练习题: 前缀 ...

随机推荐

  1. Win10 IoT C#开发 4 - UART 串口通信

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...

  2. 基于小脚丫的ADC081S101 电压采集595数码管显示

    RTL结构图 采集模块运用SPI 通讯 MISO方式收集数据 module ad_collect(input sddata,input rst_n,output reg cs,output reg s ...

  3. 使用eclipse作为python开发工具安装旧版pydev

    在Eclipse中: Help->Install New Software add之后输入的链接地址 https://dl.bintray.com/fabioz/pydev/old/ 如果使用从 ...

  4. JS高程3.基本概念(4)操作符

    ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...

  5. 移动web之用CSS样式写如苹果手机的开关键

    话说这个问题纠结了近一个小时,为什么呢?看看就知道了. 在公司的商旅Web移动版本项目上有这么一个交互,需要模仿iphone自带的开关,好吧,肯定没什么问题. Tip:请使用Chrome查看以下案例 ...

  6. Group-buy项目总结

    这是我做的第一个移动端项目,和传统PC端网站不同的是,做移动端的网站要适配各种尺寸的设备. 在默认情况下,移动设备上的viewport都是要大于浏览器可视区域的,这是因为考虑到移动设备的分辨率相对于桌 ...

  7. JavaScript基本语法(四)

    一.     JavaScript 函数 1.函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.我们可以将一些常用的代码封装成函数,待用到的时候就能直接调用使用.利用函数可以使代码的组织结构 ...

  8. jQuery插件之——简单日历

    最近在研究js插件的开发,以前看大神们,对插件都是信手拈来,随便玩弄,感觉自己要是达到那种水平就好了,就开始自己研究插件开发了.研究了一段时间之后,就开始写了自己的第一个日历插件,由于是初学插件开发, ...

  9. Linux安全基础:awk命令的使用

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  10. iOS项目groups和folder的区别(组和文件夹)

    在引用一个第三方框架的时候,已经拖进去了,但是引用框架里面的文件时,竟然报错说找不到.......查了一下,原来在拖进去时没有注意group和folder的选择! 其实仔细观察一下,不难发现,以gro ...