T1——czl SRM 15

众所周知,czl家养了一只可♂爱的***(已屏蔽),那只东西很贪吃,所以czl家很多零食仓库,然而这些仓库里有很多老鼠。

为了心爱的***,czl决定点燃纯艾条,用烟熏老鼠。

共有N个仓库,编号1-N。

假设陵陵在第i个仓库点燃艾条,烟雾就会充满该仓库,并向左右扩散Ai 的距离,接着所有|i-j|<=Ai 的仓库 j 的老鼠被消灭。

陵陵是个爱护环境的人,他想知道最少需要多少支艾条,才可以消灭所有老鼠。

【输入格式】

第一行:一个正整数,代表 N。

第二行:N 个非负整数,第 i 个数代表 A i 。

【输出格式】

第一行:一个整数,代表答案。

【样例】

Inout:

5

2 3 3 3 3

Output:

1

【数据范围】

20%的数据:N <= 20

60%的数据:N <= 10^3

100%的数据:N <= 5*10^5 ,Ai<=N

——————————————————————————

这道题就是用最少的线段覆盖整个区间

这题我写的贪心 把被包含的区间去掉之后 贪心做

#include<cstdio>
#include<algorithm>
#include<cstring>
#define LL long long
using namespace std;
const int M=1e6+,inf=0x3f3f3f3f;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int cnt,n,ans,f[M],h[M],q[M];
struct node{int l,r;}e[M];
bool cmp(node a,node b){return a.l!=b.l?a.l<b.l:a.r>b.r;}
int main()
{
int k;
n=read();
for(int i=;i<=n;i++) k=read(),e[i].l=max(,i-k),e[i].r=min(i+k,n);
sort(e+,e++n,cmp); q[++cnt]=;
for(int i=;i<=n;i++) if(e[i].r>e[q[cnt]].r) q[++cnt]=i;
k=; ans=;
int now=e[q[]].r;
while(k<=cnt){
while(k<cnt&&e[q[k+]].l<=now+) k++;
ans++; now=e[q[k]].r; k++;
}printf("%d\n",ans);
return ;
}

T2——sxt SRM 15

为了加快社会主义现代化,建设新渔村,sxt决定给小渔村里每座建筑都连上互联网,方便未来随时随地网购西瓜肥料。

小渔村很大,有 N 座建筑,但地理位置偏僻,网络信号很差。

一座建筑有网,当且仅当满足以下至少一个条件:

1、给中国移动交宽带费,直接连网,花费为 A。

2、向另外一座有网的建筑,安装共享网线,花费为 B×两者曼哈顿距离。

现在,腾腾已经统计出了所有建筑的坐标。他想知道最少要多少费用才能达到目的。

【输入格式】

第一行:三个正整数,代表 N、A、B。

接下来 N 行:每行两个整数 X i 、Y i ,第 i 行代表第 i 座建筑的坐标。

【输出格式】

第一行:一个整数,代表答案。

【样例】

Input

3 3 2

1 1

0 1

0 0

Output

7

【数据范围】

30%的数据:N <= 3,A <= 50,B <= 5

60%的数据:N <= 100,A <= 1000,B <= 20

100%的数据:N <= 10^3 ,A <= 10^4 ,B <= 50,|Xi |,|Y i | < 2^15

——————————————————————————————————

这是道很裸的最小生成树了 直接加一个点 向其他1-n连大小为A的边就好了

我写的prim可能会快点

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int M=1e3+;
const LL inf=1e15;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,S,A,B,vis[M];
LL x[M],y[M],map[M][M],d[M],ans;
LL pabs(LL x){return x>=?x:-x;}
LL calc(int s1,int s2){return pabs(x[s1]-x[s2])+pabs(y[s1]-y[s2]);}
void prim(){
d[S]=; vis[S]=;
for(int i=;i<=n;i++) d[i]=map[S][i];
for(int i=;i<=n;i++){
double mn=inf;
int h=;
for(int j=;j<=n;j++) if(!vis[j]&&mn>d[j]) mn=d[j],h=j;
ans+=mn; d[h]=; vis[h]=;
for(int j=;j<=n;j++) if(!vis[j]&&map[h][j]<d[j]) d[j]=map[h][j];
}
} int main()
{
n=read(); A=read(); B=read(); S=;
for(int i=;i<=n;i++) x[i]=read(),y[i]=read();
for(int i=;i<=n;i++) map[S][i]=map[i][S]=A;
for(int i=;i<=n;i++) for(int j=i+;j<=n;j++) map[i][j]=map[j][i]=B*calc(i,j);
prim();
printf("%lld\n",ans);
return ;
}

T3——yyl SRM 15

当了集训队爷后的yyl为了当上renying踏上了健身之路,他想让s(你可以认为这个是其他男同学的那啥)的值尽量少,以在妹子面前衬托他的健美。为了达到他的目的,他希望你对序列进行旋转操作,一次旋转操作可以使序列中的所有元素前移一位,并使 s1移动到 sn ,具体来说是这样的:

————————————————————————————————————-

这道题我们可以破环成链 每次相当于把1-n 挪一位相减求和

我们可以发现每个数对答案贡献的函数是线性的不然就是分段函数有个拐点(先递减后递增)

每一位的拐点等于 i+1-v【i】  如果小于0就是一直递增

然后每次移动区间维护一下各种信息就好辣

(zz地比赛没写出来 赛后调了一个多小时.QAQ

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long
using namespace std;
const int M=4e6+;
int read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m;
int v[M],f[M],cnt=;
LL sum,ans,now;
struct node{int pos; LL h;}e[M];
bool cmp(node a,node b){return a.h<b.h;}
int main()
{
n=read(); m=n<<;
for(int i=;i<=n;i++) v[i]=read(),v[i+n]=v[i],sum+=abs(v[i]-i);
for(int i=;i<=m;i++) f[i]=-,e[i].pos=i,e[i].h=i+-v[i];//v[i]==y-x+1
ans=sum; sort(e+,e++m,cmp);
while(e[cnt].h<=&&cnt<=m) f[e[cnt].pos]=,cnt++;
for(int i=;i<=n;i++) now+=f[i];
for(int i=;i<=n;i++){
sum+=now;
sum-=abs(v[i-]-);
sum+=abs(v[i+n-]-n);
now-=f[i];
while(e[cnt].h<=i&&cnt<=m){
int x=e[cnt].pos;
cnt++; f[x]=;
if(i<x&&x<i+n-) now+=;
}
now+=f[i+n-];
ans=min(ans,sum);
}printf("%lld\n",ans);
return ;
}

d

当然因为 v【i】<=n 所以可以利用桶排算出每个值排序后在哪个区间,然后放进那个区间 这样就是o(n)了

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long
using namespace std;
const int M=4e6+;
int read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m;
int v[M],f[M],s[M],l[M],r[M],k,cnt=;
LL sum,ans,now;
struct node{int pos; LL h;}e[M],q[M];
bool cmp(node a,node b){return a.h<b.h;}
int main()
{
n=read(); m=n<<;
for(int i=;i<=n;i++) v[i]=read(),v[i+n]=v[i],sum+=abs(v[i]-i);
for(int i=;i<=m;i++) f[i]=-,e[i].pos=i,e[i].h=max(,i+-v[i]),s[e[i].h]++;//v[i]==y-x+1
int last=; for(int i=;i<=m;i++)if(s[i]) l[i]=last+,r[i]=last+s[i],last=r[i];
for(int i=;i<=m;i++) q[l[e[i].h]]=e[i],l[e[i].h]++;
ans=sum; while(q[cnt].h<=&&cnt<=m) f[q[cnt].pos]=,cnt++;
for(int i=;i<=n;i++) now+=f[i];
for(int i=;i<=n;i++){
sum+=now;
sum-=abs(v[i-]-);
sum+=abs(v[i+n-]-n);
now-=f[i];
while(q[cnt].h<=i&&cnt<=m){
int x=q[cnt].pos;
cnt++; f[x]=;
if(i<x&&x<i+n-) now+=;
}
now+=f[i+n-];
ans=min(ans,sum);
}printf("%lld\n",ans);
return ;
}

汕头市队赛SRM15的更多相关文章

  1. 汕头市队赛 C KMP codeforces B. Image Preview

    汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...

  2. 汕头市队赛 SRM 07 D 天才麻将少女kpm

    这道题放了很久还是回来补了 D 天才麻将少女KPM SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂.     KPM上周叒打了n场麻将,但她这次又没控分,而且 ...

  3. 汕头市队赛SRM 20 T3 灵魂觉醒

    背景 自从芽衣.布洛妮娅相继灵魂觉醒之后,琪亚娜坐不住了.自己可是第一个入驻休伯利安号的啊!于是她打算去找德丽莎帮忙,为她安排了灵魂觉醒的相关课程. 第一天,第一节课. “实现灵魂觉醒之前,你需要先将 ...

  4. 汕头市队赛SRM 20 T2不净的圣杯

    不净的圣杯 SRM 20 背景 作为一张BUG级别的卡,官方打算把它修改得人畜无害一些…… 虽然名字还没想好,但是能力大概是对敌方所有单位造成d点伤害,d为自己牌组中所有卡的编号的最大公约数.这无疑是 ...

  5. 汕头市队赛SRM 20 T1魔法弹

    T1 背景 “主角光环已经不能忍啦!” 被最强控制AP博丽灵梦虐了很长一段时间之后,众人决定联合反抗. 魂魄妖梦:“野怪好像被抢光了?” 十六夜咲夜:“没事,我们人多.” 然后当然是以失败告终了. 八 ...

  6. 汕头市队赛 SRM19 字符题

    从天上掉下来了个这样的问题: 有一个字符串 从中选出两个子串 A,B,求 A+B可以构成的不同串的个数. 还想知道,这么多个串中字典序最大的那一个. 某人捡到了这个问题,并把它扔给了你. [输入] 一 ...

  7. 汕头市队赛 SRM16 T2

    描述 猫和老鼠,看过吧?猫来了,老鼠要躲进洞里.在一条数轴上,一共有n个洞,位置分别在xi,能容纳vi只老鼠.一共有m只老鼠位置分别在Xi,要躲进洞里,问所有老鼠跑进洞里的距离总和最小是多少. 输入格 ...

  8. 汕头市队赛 SRM16

    T3 C-2 SRM 16 描述 给一个数列,给出两种数字, 询问在多少个非空区间中这两种数字出现次数相同. 输入格式 第一行:一个数字n,q,n表示数列长度,q表示q组询问 第二行n个数字表示数列A ...

  9. 汕头市队赛 SRM 07 B 好玩的麻将

    B 好玩的麻将 SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂.     KPM上周又打了n场麻将,又控了分使得自己的排名是1..n的一个排列.     但她 ...

随机推荐

  1. h5页面苹果端浮动问题

    最近在开发一个h5的app端,前端同事写好页面,我们后端java动态化页面,测试的时候发现安卓端什么浏览器都正常如下图1,可是苹果端无论什么浏览器都出现了底部菜单缺少了两个下图2图一:正常显示 图2, ...

  2. 数据分析处理库Pandas——显示设置

    获取最多打印行数 显示内容超出部分打印成省略号. 设置最多打印行数 获取最多打印列数 显示内容超出部分打印成省略号. 设置最多打印列数 获取打印字符串的最大长度 显示内容超出部分打印成省略号. 设置打 ...

  3. 多通道CNN

    在读Convolutional Neural Networks for Sentence Classification 这个文章的时候,它在论文中提出一种模型变种就是 CNN-multichannel ...

  4. 手动完全卸载Office

    1 当然出现安装错误,或是无法安装先考虑官方卸载工具卸载,运行后要是解决了问题是最好的.毕竟手动删除比较麻烦. 开始我们先停止 Office Source Engine 服务.以windows7为例子 ...

  5. Dapper基础增删查改、事务和存储过程

    1.前言 Dapper是一个轻量级的orm框架,上手也非常的简单,它可以实体映射,所以先准备实体如下: public class Couser { public int id { get; set; ...

  6. Java-数据结构之二叉树练习

    本来这个随笔应该在4月17号就应该发出来的.不巧的是,那天晚上收到了offer,然后接下去两天为入职到处跑,20号入职后一直忙,直到最近几天才有时间看看书.然而20多天前就看完的了二叉树,然后17号那 ...

  7. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 's.areaname' in 'field list'错误

    在使用mybatis框架做查询的时候,出现了如下错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown colum ...

  8. centso下如何解压RAR文件

    tar -xvf rarlinux-3.9.3.tar.gz cd rar   make 看见下面这些信息就是安装成功了 mkdir -p /usr/local/bin mkdir -p /usr/l ...

  9. Web 开发的未来:React、Falcor 和 ES6

    Web 开发的未来:React.Falcor 和 ES6 Widen是一家数字资产管理解决方案提供商.目前,其技术栈还非常传统,包括服务器端的Java.浏览器端的AngularJS.提供REST AP ...

  10. ios开发3.5和4.0寸屏幕自适应中的一点问题

    在开发iso应用中需要考虑到ip4的3.5寸屏幕和ip5的4寸屏幕的高度不一样的问题.常见的问题有滚动条位置,底部被挡住等情况:我遇见是tableview中添加下拉上提刷新功能时刷新指示器显示位置的问 ...