1.28 noip t1难度模拟赛

1 0pts

2 10pts

3 100pts

本想装个逼,从后面开始做,确实t3第一个AC,获得了紫色high light,BUT,第二题自己造的极端数据都过了,结果上讲台看,0分!!怎么可能?!检查了一下精度问题,没毛病啊,在最后两分钟发现我把题读错了……我以为必须要是升序的数列……被坑惨了,两分钟改了一下,得了10pts呵呵.t1没时间调了,死循环


t1迷宫

注意用dp做啊!dfs会爆,bfs懒得写……

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N=30;
int mapp[N][N];
int f[N*N][N][N];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int n,ex,ey,sx,sy;

void readdata()
{
    char c;
    scanf("%d\n",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            scanf("%c",&c);
            if(c!='X')mapp[i][j]=1;
            if(c=='X')mapp[i][j]=0;
            if(c=='S'){sx=i;sy=j;}
            if(c=='E'){ex=i;ey=j;}
        }
        scanf("\n");
    }
}

void work()
{
    f[0][sx][sy]=1;
    rep(t,1,n*n)
        rep(i,1,n)
            rep(j,1,n)
                if(mapp[i][j])
                {
                    for(int k=0;k<4;k++)
                    {
                        int nx=i+dx[k],ny=j+dy[k];
                        if(mapp[nx][ny] && nx>=1 && ny>=1 && nx<=n && ny<=n)
                        {
                            f[t][i][j]=f[t][i][j]+f[t-1][nx][ny];
                        }
                    }
                }

    rep(t,1,n*n)
        if(f[t][ex][ey])
        {
            printf("%d\n%d",t,f[t][ex][ey]);
            break;
        }
}

int main()
{
    readdata();
    work();
    return 0;
}

# t2 最大数列

前缀和这波操作是真的不懂……(这是wolf gang的代码)

#include<bits/stdc++.h>
using namespace std;
#define N 100010
#define inf 0x3f3f3f3f

int n,a[N],f[N],h[N],t[N];

int read()
{
    int x=0,f=1;char c=getchar();
    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 main()
{
    n=read();

    t[n+1]=h[0]=0;

    for(int i=1;i<=n;i++)
    {
        a[i]=read();
        h[i]=h[i-1]+a[i];//前缀
    }

    for(int i=n;i>0;i--)
        t[i]=t[i+1]+a[i];//后缀

    int mi=0;f[0]=-inf;

    for(int i=1;i<=n;i++)//求左区间
    {
        f[i]=h[i]-mi;
        f[i]=max(f[i],f[i-1]);
        mi=min(mi,h[i]);
    }
    int ma=-inf,ans=-inf;mi=0;

    for(int i=n;i>=2;i--)
    {
        ma=max(ma,t[i]-mi);
        ans=max(ans,ma+f[i-1]);//加答案
        mi=min(t[i],mi);
    }
    printf("%d",ans);
    return 0;
}

T3 安装服务器

1.感觉这题比前两题简单啊但我还是调了接近一个小时

2.刘汝佳,蓝书,第六页,打钱,有一个棒棒的证明

3.算法:带权中位数(模版提难度吧)

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define N 100010
using namespace std;

int T,quan,xx,yy,cnt=0;

int read()
{
    int x=0,f=1;char c=getchar();
    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;
}

struct city{
    int x,y,v; //v:k*p
}C[N];

bool cmpx(city a,city b){return a.x<b.x;}
bool cmpy(city a,city b){return a.y<b.y;}

int main()
{
    //freopen("read.txt","r",stdin);
    T=read();

    rep(i,1,T)
    {
        int x,y,p,k;
        x=read(),y=read(),k=read(),p=read();
        C[i]=(city){x,y,k*p};
        quan+=k*p;
    }

    sort(C+1,C+T+1,cmpx);
    quan=(quan+1)>>1;

    rep(i,1,T)
    {
        cnt+=C[i].v;

        if(cnt>=quan)
        {
            xx=C[i].x;
            break;
        }
    }

    sort(C+1,C+T+1,cmpy);

    cnt=0;
    rep(i,1,T)
    {
        cnt+=C[i].v;

        if(cnt>=quan)
        {
            yy=C[i].y;
            break;
        }
    }

    printf("%d %d",xx,yy);
    return 0;
}

原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11635629.html

时间: 2024-10-28 06:42:40

1.28 noip t1难度模拟赛的相关文章

NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)

7划分数列(seq.pas/c/cpp) [题目描述] 给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小 [输入格式] 第一行两个正整数n,k 第二行为此数列ai [输出格式] 一行一个数,为题目所求答案 [样例输入] 5 2 2 1 3 4 5 [样例输出] 9 [数据规模] 30%数据 n <= 30, k <= 10 100%数据 n <= 100000, k <= n, ai <= 10^9 150%数据 n <= 100000, k &l

2014-10-18 noip提高组模拟赛(codecomb)[未填]

> <看了一下觉得挺难的...除了T2 T1只想到了找环,> <倍增的思想没有学过,所以看题解看得雨里雾里的(最近真的打算学一下!) T2贪心..很容易看出的 T3感觉题目没有怎么看懂...> <正解居然是树形dp 果然不太会 T4蒟蒻> <我连最小子矩阵都不会求T_T其他更不用说了 虽然没有参加比赛,但感觉自己到不了200(hzwer说没有200应该去参加普及组QAQ) 题目出的挺好的,觉得noip极有可能出现T1T2T3,所以在此mark 而且T1以为是

10-18 noip提高组模拟赛(codecomb)T2贪心

T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority_queue: #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> using namespace std; c

【2018.11.22】ctsc2018(模拟赛!)

太蠢了……$noip$ 后第一次模拟赛竟然是这样的……完全就是打击自信 / 降智…… 1. 假面 一道神仙概率 $dp$!第一次写…… 拿到题就发现血量 $m_i$ 的上限只有 $100$! 然后 $0$ 操作就可以用 $rate(i,j)$ 动态维护第 $i$ 个人血量为 $j$ 的概率啦. $1$ 操作比较麻烦(但是它故意弄得很少). 设 $live_i$ 和 $dead_i$ 分别为 $1$ 操作范围内的第 $i$ 个人活着和死了的概率,$g_{i,j}$ 是除 $i$ 以外有 $j$ 个

2017.11.25【NOIP提高组】模拟赛A组

2017.11.25[NOIP提高组]模拟赛A组 T1 3467. [NOIP2013模拟联考7]最长上升子序列(lis) T2 3468. [NOIP2013模拟联考7]OSU!(osu) T3 3472. [NOIP2013模拟联考8]匹配(match) T1 有转移方程f[i]=max{f[j]}+1,a[j]<a[i] 可以用线段树+离散化维护这个方程,因为涉及以往状态可以用主席树维护 打太丑爆空间了 Code 1 #include<cstdio> 2 #include<c

NOIP模拟赛

#1[Nescafé 31]杯NOIP模拟赛 t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于求得是看到的不同的老鼠数目,不能直接用过河卒做,因为同一个位置的老鼠可能会统计多次,我们还需要增加一维即方向. f[i,j,0]表示到从上面一个格子走到(i,j)时最少老鼠数,f[i,j,1]表示左边. f[i,j,0]:=min(f[i-1,j,0]+

2014-11-3 NOIP模拟赛2

NOIP 2014 水题模拟赛 (请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称 数列 刷漆 排队 英文题目与子目录名 seq paint layout 可执行文件名 seq paint layout 输入文件名 seq.in paint.in layout.in 输出文件名 seq.out paint.out layout.out 每个测试点时限 2 秒 1 秒 1 秒 测试点数目 10 10 10 每个测试点分值 10 10 10 附加样例文件 无 无 无 结果比较方式 全文比较(

NOIP模拟赛 6.29

2017-6-29 NOIP模拟赛 Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的命令进行移动,命令包括‘E’.‘S’.‘W’.‘N’四种,分别对应东南西北.执行某个命令时,它会向对应方向移动一个单位.作为新型机器人,它可以执行命令串.对于输入的命令串,每一秒它会按命令行动一次.执行完命令串的最后一个命令后,会自动从头开始循环.在0时刻时机器人

2017.12.02【NOIP提高组】模拟赛A组

2017.12.02[NOIP提高组]模拟赛A组 T1 3555[GDKOI2014模拟]树的直径 T2 3542[清华集训2014]冒泡排序 T3 3486[NOIP2013模拟联考10]道路改建(rebuild) T1 树直径的一个性质,两棵树合并,形成新的树的直径的两个端点为原树中的四个端点之二. 可以用反证法证明.用此性质本题就变成了lca裸题了 Code #include<cstdio> #include<cstring> #include<cmath> #i