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=0,f=1;char s=getchar();
    while(s<‘0‘||s>‘9‘){if(s==‘0‘)f=-1;s=getchar();}
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x*f;
}
int main()
{
    freopen("sequence.in","r",stdin);
    freopen("sequence.out","w",stdout);
    n=init();
    for(int    i=1;i<=n;i++)
        a[i]=init();
    sort(a+1,a+1+n);
    for(int i=2;i<=n;i++)
        if(a[i]<=a[i-1]){
            ans+=a[i-1]-a[i]+1;
            a[i]=a[i-1]+1;
        }
    cout<<ans<<endl;
    return 0;
}

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[2][maxn],s1[maxn],s2[maxn],ans;
int main()
{
    freopen("lab.in","r",stdin);
    freopen("lab.out","w",stdout);
    cin>>n>>a>>b>>k;
    f[0][a]=1;
    for(int i=1;i<=k;i++){
        s1[0]=0;s2[n+1]=0;
        for(int j=1;j<=n;j++)
            if(j==b)s1[j]=s1[j-1];
            else s1[j]=(s1[j-1]+f[i-1&1][j])%mod;
        for(int j=n;j>=1;j--)
            if(j==b)s2[j]=s2[j+1];
            else s2[j]=(s2[j+1]+f[i-1&1][j])%mod;
        for(int j=1;j<=n;j++)if(j!=b){
            if(j<b){
                f[i&1][j]=(s1[(j+b+1)/2-1]-f[i-1&1][j]+mod)%mod;
            }
            if(j>b){
                f[i&1][j]=(s2[(j+b)/2+1]-f[i-1&1][j]+mod)%mod;
            }
        }
        for(int j=1;j<=n;j++)
            f[i-1&1][j]=0;
    }
    for(int i=1;i<=n;i++)
        if(i!=b){
            ans+=f[k&1][i];
            if(ans>mod)ans%=mod;
        }
    cout<<ans<<endl;
    return 0;
}

旅行(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*10],hea,tai,f[maxn];
ll sum[maxn],dis[maxn];
struct node{
    int v,pre,bz;
}e[maxn*2];
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=0,f=1;char s=getchar();
    while(s<‘0‘||s>‘9‘){if(s==‘-‘)f=-1;s=getchar();}
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x*f;
}
void Bfs(int s){
    for(int i=1;i<=n;i++)dis[i]=inf;
    for(int i=1;i<=n;i++)f[i]=0;
    hea=0;tai=0;
    q[++tai]=s;dis[s]=0;f[s]=1;
    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]+1;
            c[s][v]=k;f[v]=1;
        }
    }
    for(int i=1;i<=n;i++)
        sum[s]+=dis[i];
}
ll bfs(int s,int x){
    for(int i=1;i<=n;i++)dis[i]=inf;
    for(int i=1;i<=n;i++)f[i]=0;
    hea=0;tai=0;
    q[++tai]=s;dis[s]=0;f[s]=1;
    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]+1;f[v]=1;
        }
    }
    ll ret=0;
    for(int i=1;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=1;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=1;i<=n;i++)Bfs(i);
    for(int k=1;k<=m;k++){
        u=p[k].u;v=p[k].v;mx=0;
        for(int i=1;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 0;
}

时间: 2024-10-07 05:26:57

11.1 morning的相关文章

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET

How to Uninstall Internet Explorer 11 for Windows 7

Internet Explorer 11 is the newest version of Microsoft's web browser, but not everyone is a fan. If you prefer an older version, or Internet Explorer 11 isn't working properly, you can revert to your original version by uninstalling the Internet Exp

C#认证第一章1 题 11题

C#第一章第一题 C#认证第一章  11题

C#认证考试试题汇编: 第二单元:1,11

1. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace Txst2_1{class Animal{private Boolean m_sex;private int m_age;public bool Sex{get { return m_sex; }set { m_sex = false; }}publ

C/C++算法竞赛入门经典Page15 习题1-1 平均数

题目:输入3个整数,输出他们的平均值,保留3位小数. 首先,声明三个整数a,b,c和一个浮点数d: int a,b,c; double d; 输入三个整数a,b,c: scanf("%d%d%d",&a,&b,&c); 将a,b,c取平均值以后复制给d: d=(double)(a+b+c)/3; 最后输出d: printf("%.3lf",d); %.3lf表示保留3位小数的long float. 注意:不能直接这样输出: printf(&q

Centos 使用C++11 编译

今天编译代码,发现使用auto后无法编译,我的当前linux内核版本:(4.7之后即可支持C++11) 这时,在编译末尾加入 -std=c++11 就可以正常编译了.如:

嵌入式软件设计第11次实验报告

学号:140201126             姓名:杨鹏飞 组别:第2组                实验地点:D19 一.实验目的: 1.了解短信AT指令的使用方法. 2.掌握使用短信AT指令驱动SIM900A发送和接收短信的方法. 二.实验内容: 1.使用AT命令进行模块测试,发送和接收短信. 2.编写程序利用触摸屏完成固定号码短信的发送和接收.(需要加上AT测试命令模块.手机SIM卡检测模块.手机信号质量检测模块等等.) 三.实验过程描述及结果展示: 短信常用AT指令 程序代码: #