2021牛客多校训练2

k题(模拟)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
int n, b[maxn];
int ans[maxn]={0};
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int pos,x;
        scanf("%d %d",&pos,&x);
        b[pos] = x;
    }
    stack<int> k;
    int maxx=n;
    for(int i=1;i<=n;i++)
    {
        if(b[i])
        {
            if(k.size()+1<b[i])///把第i个的a压进去也不满足要求,所以不能
            {
                printf("-1\n");
                return 0;
            }
            while((int)k.size()>=b[i])
            ///前面有(int)k.size()-b[i]个都比当前的ans[i]大
            {
                ans[ k.top() ] = maxx;
                maxx--;
                k.pop();
            }
            k.push(i);
        }
        else
        {
            k.push(i);
        }
    }
    while(!k.empty())
    {
        ans[k.top()]=maxx;
        maxx--;
        k.pop();
    }
    for(int i=1;i<=n;i++)
    {
        printf("%d ",ans[i]);
    }
    return 0;
}

I无他 可可爱爱的板子 QwQ早知道比赛的时候敲一下了 不知道自己在想什么 居然以为要分层什么的 就在那里干坐着啊啊啊啊啊 抱憾终生

#include <bits/stdc++.h>
using namespace std;
#define debug(x) cout << #x << " == " << x << endl;
#define INF 0x3f3f3f
#define ll long long
const ll int MAX_N = 5e5 + 10;
char map1[40][40];
char map2[40][40];
struct node
{
    int x1, y1;
    int x2, y2;
    string way;
    node(int a, int b, int c, int d, string e) : x1(a), y1(b), x2(c), y2(d) { way = e; }
};


int dx1[] = {1, 0, 0, -1}; ///左边的🐧
int dy1[] = {0, -1, 1, 0};

int dx2[] = {1, 0, 0, -1}; ///右边的🐧
int dy2[] = {0, 1, -1, 0};

char fx[] = {'D', 'L', 'R', 'U'};
char ff[] = {'U', 'R', 'L', 'D'};

bool vis[22][22][22][22] = {0};

bool judge(int x, int y)
{
    return x && y && x <= 20 && y <= 20;
}

node point(0, 0, 0, 0, "");
void bfs()
{
    queue<node> q;
    q.push(node(20, 20, 20, 1, ""));
    vis[20][20][20][1] = 1;
    while (!q.empty())
    {
        node qd = q.front();
        q.pop();

        int x1 = qd.x1;
        int x2 = qd.x2;
        int y1 = qd.y1;
        int y2 = qd.y2;

        string way = qd.way;

        if (x1 == 1 && y1 == 20 && x2 == 1 && y2 == 1)
        {
            point = qd;
            break;
        }
        for (int i = 0; i < 4; i++)
        {

            int xx1 = x1 + dx1[i];
            int yy1 = y1 + dy1[i];
            int xx2 = x2 + dx2[i];
            int yy2 = y2 + dy2[i];

            if (xx1 < 1 || xx1 > 20 || yy1 < 1 || yy1 > 20 || map1[xx1][yy1] == '#')
            {
                xx1 = x1;
                yy1 = y1;
            }
            if (xx2 < 1 || xx2 > 20 || yy2 < 1 || yy2 > 20 || map2[xx2][yy2] == '#')
            {
                xx2 = x2;
                yy2 = y2;
            }
            if (vis[xx1][yy1][xx2][yy2])
                continue;
            vis[xx1][yy1][xx2][yy2] = 1;
            q.push(node(xx1, yy1, xx2, yy2, way + fx[i]));
        }
    }
    printf("%d\n", point.way.length());
    cout << point.way << endl;
}
int main()
{
    for (int i = 1; i <= 20; i++)
    {
        scanf("%s", map1[i] + 1);
        scanf("%s", map2[i] + 1);
    }
    bfs();

    int x1 = 20, y1 = 20;
    int x2 = 20, y2 = 1;
    map1[20][20] = 'A';
    map2[20][1] = 'A';
    string a = point.way;
    for (int i = 0; i < a.length(); i++)
    {

        int pos;
        if (a[i] == 'D')
            pos = 0;
        else if (a[i] == 'L')
            pos = 1;
        else if (a[i] == 'R')
            pos = 2;
        else
            pos = 3;

        int xx1 = x1 + dx1[pos];
        int yy1 = y1 + dy1[pos];
        int xx2 = x2 + dx2[pos];
        int yy2 = y2 + dy2[pos];
        if (xx1 < 1 || xx1 > 20 || yy1 < 1 || yy1 > 20 || map1[xx1][yy1] == '#')
        {
            xx1 = x1;
            yy1 = y1;
        }
        if (xx2 < 1 || xx2 > 20 || yy2 < 1 || yy2 > 20 || map2[xx2][yy2] == '#')
        {
            xx2 = x2;
            yy2 = y2;
        }
        x1 = xx1;
        y1 = yy1;
        x2 = xx2;
        y2 = yy2;
        map1[x1][y1] = 'A';
        map2[x2][y2] = 'A';
    }
    for (int i = 1; i <= 20; i++)
    {
        printf("%s %s\n", map1[i] + 1, map2[i] + 1);
    }
    system("pause");
}

G下面的思路还是有问题 不太明白 放着吧

#include <bits/stdc++.h>
using namespace std;
#define debug(x) cout << #x << " == " << x << endl;
#define ll long long
const ll int MAX_N = 1e5 + 10;
struct node
{
    int l, r; ///左区间端点和右区间端点
    int len;  ///区间长度
    bool operator<(node b)
    {
        if(b.l==l)
            return r > b.r;
        return l < b.l;这样子区间尽量地长,而且包含的数组多的在前面
    }
} a[MAX_N],s2[MAX_N];///被其他组包含的组
int tot2 = 0;

int s1[MAX_N] = {0};///包含着其他组的组
int tot1 = 0;


int main()
{
    int n, k;
    scanf("%d %d", &n, &k);
    for (int i = 1; i <= n; i++)
    {
        int x, y;
        scanf("%d %d", &x, &y);
        a[i].l=x;
        a[i].r=y;
        a[i].len = y - x;
    }
    sort(a + 1, a + n + 1);
    ll maxxr = INT_MAX;
    for (int i = 1;i<=n;i++)
    {
        if((ll)a[i].r>maxxr)
        {
            tot1++;
            s1[tot1] = a[i].len;///当前左端点最短的时候,右区间达到最大距离
        }
        else
        {
            tot2++;
            maxxr = a[i].r;
            s2[tot2] = a[i];
        }
        sort(s1 + 1, s1 + 1 + tot1, greater<int>());
        ///从大到小排序,这样子可以获得最大的可能前缀和
        for(int i=1;i<=tot1;i++)
        {
            s1[i] = s1[i - 1] + s1[i];
        }
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值