11.1 morning
完美的序列(sequence)
Time Limit:1000ms Memory Limit:64MB
题目描述
LYK 认为一个完美的序列要满足这样的条件:对于任意两个位置上的数都不相同。然而
并不是所有的序列都满足这样的条件。
于是 LYK 想将序列上的每一个元素都增加一些数字(当然也可以选择不增加),使得整个
序列变成美妙的序列。
具体地, LYK 可以花费 1 点代价将第 i 个位置上的数增加 1,现在 LYK 想花费最小的代价
使得将这个序列变成完美的序列。
输入格式(sequence.in)
第一行一个数 n,表示数字个数。
接下来一行 n 个数 ai 表示 LYK 得到的序列。
输出格式(sequence.out)
一个数表示变成完美的序列的最小代价。
输入样例
4
1 1 3 2
输出样例
3
数据范围
对于 30%的数据 n<=5。
对于 60%的数据 n<=1000。
对于 80%的数据 n<=30000, ai<=3000。
对于 100%的数据 n<=100000, 1<=ai<=100000。
贪心开始写wa了....
/*考试的时候贪心贪错了 其实模拟一下就好 排一遍序 如果a[i]<=a[i-1]就把a[i]变成a[i-1]+1*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 100010
#define ll long long
using namespace std;
ll n,a[maxn],ans;
ll init(){
ll x=,f=;char s=getchar();
while(s<''||s>''){if(s=='')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
n=init();
for(int i=;i<=n;i++)
a[i]=init();
sort(a+,a++n);
for(int i=;i<=n;i++)
if(a[i]<=a[i-]){
ans+=a[i-]-a[i]+;
a[i]=a[i-]+;
}
cout<<ans<<endl;
return ;
}
LYK 与实验室(lab)
Time Limit:5000ms Memory Limit:64MB
题目描述
LYK 在一幢大楼里,这幢大楼共有 n 层, LYK 初始时在第 a 层上。
这幢大楼有一个秘密实验室,在第 b 层,这个实验室非常特别,对 LYK 具有约束作用,
即若 LYK 当前处于 x 层,当它下一步想到达 y 层时,必须满足|x-y|<|x-b|,而且由于实验室
是不对外开放的,电梯无法停留在第 b 层。
LYK 想做一次旅行,即它想按 k 次电梯,它想知道不同的旅行方案个数有多少个。
两个旅行方案不同当前仅当存在某一次按下电梯后停留的楼层不同。
输入格式(lab.in)
一行 4 个数, n,a,b,k。
输出格式(lab.out)
一个数表示答案,由于答案较大,将答案对 1000000007 取模后输出。
输入样例 1
5 2 4 1
输出样例 1
2
输入样例 2
5 2 4 2
输出样例 2
2
输入样例 3
5 3 4 1
输出样例 3
0
数据范围
对于 20%的数据 n,k<=5。
对于 40%的数据 n,k<=10。
对于 60%的数据 n,k<=500。
对于 90%的数据 n,k<=2000。
对于 100%的数据 n,k<=5000。
dp+优化
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 5010
#define mod 1000000007
using namespace std;
int n,a,b,k;
long long f[][maxn],s1[maxn],s2[maxn],ans;
int main()
{
freopen("lab.in","r",stdin);
freopen("lab.out","w",stdout);
cin>>n>>a>>b>>k;
f[][a]=;
for(int i=;i<=k;i++){
s1[]=;s2[n+]=;
for(int j=;j<=n;j++)
if(j==b)s1[j]=s1[j-];
else s1[j]=(s1[j-]+f[i-&][j])%mod;
for(int j=n;j>=;j--)
if(j==b)s2[j]=s2[j+];
else s2[j]=(s2[j+]+f[i-&][j])%mod;
for(int j=;j<=n;j++)if(j!=b){
if(j<b){
f[i&][j]=(s1[(j+b+)/-]-f[i-&][j]+mod)%mod;
}
if(j>b){
f[i&][j]=(s2[(j+b)/+]-f[i-&][j]+mod)%mod;
}
}
for(int j=;j<=n;j++)
f[i-&][j]=;
}
for(int i=;i<=n;i++)
if(i!=b){
ans+=f[k&][i];
if(ans>mod)ans%=mod;
}
cout<<ans<<endl;
return ;
}
旅行(travel)
Time Limit:1000ms Memory Limit:64MB
题目描述
LYK 想去一个国家旅行。这个国家共有 n 个城市,有些城市之间存在道路,我们假定这
些道路长度都是 1 的,更准确的说,共有 m 条道路。
我们定义城市 A 与城市 B 的最短路为 A 到 B 的所有路径中,经过的道路最少的那条道
路。最短路的长度为这条道路的所有道路长度之和,由于所有道路长度都为 1,因此假如 A
到 B 之间最短路的道路条数为 k,则 A 到 B 的最短路长度为 k。
我们定义整个国家的最短路为任意两个城市( A,B 与 B,A 算作不同的点对)之间的最短
路长度的和。
然而这个国家正处于危乱之中,极有可能一条道路会被恐怖分子炸毁。
LYK 想知道,万一某条道路被炸毁了,整个国家的最短路为多少。若炸毁这条道路后整
个国家不连通了,那么就输出“ INF” (不加引号)。
输入格式(travel.in)
第一行两个数 n,m。
接下来 m 行,每行两个数 u,v,表示存在一条道路连接 u,v(数据保证不存在自环)。
输出格式(travel.out)
输出 m 行,第 i 行的值表示当第 i 条道路被炸毁时,整个国家的最短路是多少,若图不
连通,则输出“ INF”。
输入样例
2 2
1 2
1 2
输出样例
2 2
数据范围
对于 20%的数据 n<=10,n<m<=100。
对于 40%的数据 1<=n<m<=100。
对于 70%的数据 1<=n<=100,n<m<=3000。
对于再另外 10%的数据对于所有节点( i 1<=i<n),存在一条边连接 i与 i+1,且 n=m,n<=100。
对于再再另外 10%的数据对于所有节点 i( 1<=i<n),存在一条边连接 i 与 i+1,且 n=m,
n<=1000。
对于再再再另外 10%的数据对于所有节点( i 1<=i<n),存在一条边连接 i 与 i+1,且 n=m,
n<=100000。
70最短路树 另外的容斥原理弃疗了2333
#include<cstdio>
#define inf 1e14
#define ll long long
#define maxn 3010
#ifdef unix
#define LL "%lld\n"
#else
#define LL "%I64d\n"
#endif
using namespace std;
int n,m,num,head[maxn],c[maxn][maxn];
int q[maxn*],hea,tai,f[maxn];
ll sum[maxn],dis[maxn];
struct node{
int v,pre,bz;
}e[maxn*];
struct edge{
int u,v;
}p[maxn];
void Add(int from,int to,int x){
num++;e[num].v=to;
e[num].bz=x;
e[num].pre=head[from];
head[from]=num;
}
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Bfs(int s){
for(int i=;i<=n;i++)dis[i]=inf;
for(int i=;i<=n;i++)f[i]=;
hea=;tai=;
q[++tai]=s;dis[s]=;f[s]=;
while(hea<=tai){
int k=q[++hea];
for(int i=head[k];i;i=e[i].pre){
int v=e[i].v;
if(f[v])continue;
q[++tai]=v;dis[v]=dis[k]+;
c[s][v]=k;f[v]=;
}
}
for(int i=;i<=n;i++)
sum[s]+=dis[i];
}
ll bfs(int s,int x){
for(int i=;i<=n;i++)dis[i]=inf;
for(int i=;i<=n;i++)f[i]=;
hea=;tai=;
q[++tai]=s;dis[s]=;f[s]=;
while(hea<=tai){
int k=q[++hea];
for(int i=head[k];i;i=e[i].pre){
int v=e[i].v;
if(f[v]||e[i].bz==x)continue;
q[++tai]=v;dis[v]=dis[k]+;f[v]=;
}
}
ll ret=;
for(int i=;i<=n;i++)
ret+=dis[i];
return ret;
}
int main()
{
freopen("travel.in","r",stdin);
freopen("travel.out","w",stdout);
n=init();m=init();
int u,v;long long mx;
for(int i=;i<=m;i++){
u=init();v=init();
Add(u,v,i);Add(v,u,i);
p[i].u=u;p[i].v=v;
}
for(int i=;i<=n;i++)Bfs(i);
for(int k=;k<=m;k++){
u=p[k].u;v=p[k].v;mx=;
for(int i=;i<=n;i++)
if(c[i][u]!=v&&c[i][v]!=u)
mx+=(ll)sum[i];
else mx+=(ll)bfs(i,k);
if(mx>=inf)printf("INF\n");
else printf(LL,mx);
}
fclose(stdin);fclose(stdout);
return ;
}
11.1 morning的更多相关文章
- 地区sql
/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...
- WinForm 天猫2013双11自动抢红包【源码下载】
1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- CSS垂直居中的11种实现方式
今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...
- C++ 11 多线程--线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...
- CSharpGL(11)用C#直接编写GLSL程序
CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...
- ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...
- C++11 shared_ptr 智能指针 的使用,避免内存泄露
多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
系列目录 系统需要越来越自动化,我们需要引入日志记录和异常捕获管理员的操作记录需要被记录,看出哪些模块是频繁操作,分析哪些是不必要的功能,哪些是需要被优化的.系统的异常需要被捕获,而不是将系统出错显示 ...
随机推荐
- 用Enterprise Architect从源码自动生成类图
http://blog.csdn.net/zhouyong0/article/details/8281192 /*references:感谢资源分享者.info:简单记录如何通过工具从源码生成类图,便 ...
- theano中对图像进行convolution 运算
(1) 定义计算过程中需要的symbolic expression """ 定义相关的symbolic experssion """ # c ...
- 通过jquery获取后台传过来的值进行全选
注:funs是从action中传过来的list<Function> 其中属性中有其子对象list<role> 下面通过s标签遍历 ,也可以通过c标签遍历 jsp页面中: < ...
- A simple brute force problem.
hdu4971:http://acm.hdu.edu.cn/showproblem.php?pid=4971 题意:给你n个项目,每完成一个项目会有一定的收益,但是为了完成某个项目,要先学会一些技能, ...
- android和struts2实现android文件上传
1.开发准备如下2个工具类 package org.lxh.util; import java.io.BufferedReader; import java.io.InputStreamReader; ...
- bzoj2064
这道题初看真的毫无思路,又是合并又是分裂的 但实际上我们知道,当两组和相等的时候才能由一组变成另一组 我们将初始状态和最终状态划分成若干对,每对中的两组元素和相等的 不难发现,最少步骤=n+m-2*对 ...
- showMonth
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- (转载)prepare函数的学习,我要学习php第二天
(转载)http://www.boyuan78.com/htm/company/2012_1030_60.html prepare函数的学习,我要学习php第二天 $mysqli = new mysq ...
- 【转】Log4cpp 封装
[转自]http://blog.csdn.net/ylioi/article/details/9049591 这篇文章对Log4cpp使用了宏定义和类进行封装,非常有借鉴意义. log4cpp 是参考 ...
- java基础 (六)面向对象(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...