10.31 模拟赛

10.31 模拟赛

A LIS

考虑每个数字前从 $ m $ 降序构造到 $ a_i $ 即可。

#include <iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
#define MAXN 300006
int n , m , k;
int A[MAXN];
vector<int> ans;
int main() {
    cin >> n >> m >> k;
    for( int i = 1 ; i <= k ; ++ i ) scanf("%d",&A[i]);
    int lef = n - k;
    for( int i = 1 ; i <= k ; ++ i ) {
        int cur = m;
        while( lef && cur > A[i] ) ans.push_back(cur), -- cur ,-- lef;
        ans.push_back( A[i] );
    }
    if( lef ) return puts("No") , 0;
    puts("Yes");
    for( auto it : ans ) printf("%d ",it);
}

T2 图论

看到数据范围考虑暴搜,枚举答案(其实也就 $ 2n $)只要倒着枚举以前的边就显然仍然存在。

于是每次加边后进行一下宽搜,每个边只会入队一次,每次扩展是 $ O(n) $ 故总复杂度 $ O(n^3) + O(n^3) $

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
#define MAXN 1006
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
int n , m , cnt;
int deg[MAXN] , G[MAXN][MAXN];
queue<pii> Q;
void bfs( int x ) {
    for (int i = 1; i <= n; i++)
        for (int j = i + 1; j <= n; j++)
            if (!G[i][j] && deg[i] + deg[j] >= x) Q.push(make_pair(i, j)), G[i][j] = G[j][i] = 1;
    while (!Q.empty()) {
        pii now = Q.front(); Q.pop();
        ++ deg[now.fi] , ++ deg[now.se];
        ++ cnt;
        int u = now.first, v = now.second;
        for (int i = 1; i <= n; i++)
            if (i != u && !G[u][i] && deg[u] + deg[i] >= x)
                G[u][i] = G[i][u] = 1 , Q.push(mp(u, i));
        for (int i = 1; i <= n; i++)
            if (i != v && !G[v][i] && deg[v] + deg[i] >= x)
                G[v][i] = G[i][v] = 1 , Q.push(mp(v, i));
    }
}
int main() {
    cin >> n >> m;
    for (int i = 1 , u , v; i <= m; ++ i)
        scanf("%d%d", &u, &v) , deg[u]++, deg[v]++ , G[u][v] = G[v][u] = 1 , cnt++;
    int all = n * ( n - 1 ) / 2;
    for (int i = 2 * n; i >= 0; -- i) {
        bfs( i );
        if (cnt == all)
            return printf("%d\n", i) , 0;
    }
}

T3 防御

考虑每个点通过这堵墙投影到 $ x $ 轴上一段区间,于是就成了一个区间包含问题(二维偏序)

然后就鸽掉了。。精度误差毒瘤。

原文地址:https://www.cnblogs.com/yijan/p/1031comp.html

时间: 2024-11-03 05:28:04

10.31 模拟赛的相关文章

[10.31模拟赛]T3

Description 青青草原上有\(k\)只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献从小到大排成一排,以便于发放奖金. 每只羊都会得到数值在\(1\)~\(n\)的奖金,并且第i只羊的奖金应为第\(i+1\)只羊的约数(即满足\(ai|ai+1\)). 现在包包大人想知道一共有多少种不同的发放奖金的方式(两种发放奖金的方式不同是指在两种发放奖金的方式中存在某只羊拿到的奖金不同) Input 一行两个正整数\(n\),\(k\),满足

2019.10.31模拟赛

说在前面 考场遇见原题??? 上午刚做的 下午就\(T3\)考到了\(2333\) 然而还是因为忘了取模挂了28分 T1 Dove下跳棋 数据太水输出n-1可得90 Dove 喜爱下跳棋,在传统的跳棋基础之上,Dove 又延伸出了许多别的玩法.Dove 以一个一维数轴为棋盘下跳棋,总共会移动棋子?? ? 1 次.因为讨厌没有规律,所以Dove 每次只会恰好把棋子向右移动?? 个格子. Cicada 送给了Dove 一个长度为?? 的数列{??},为了表示感谢,Dove 打算以Cicada 送给他

10.2模拟赛总结

10.2 模拟赛总结 T1. 数位dp: 一个非常非常非常非常显然的数位 DP \([L,R] = [1,R]-[1,L-1]\) 所以是分别求两次小于等于某个数字的方案数 \(f(i,j,k)\) 表示从低位数起的第 \(i\) 位,按照规则计算后答案为 \(j\quad (j=0,1)\) \(k\) 表示只考虑后面结尾和 \(lmt\)后面几位 的大小关系 \((k=0,1)\) 考虑第 \(i+1\) 位,算一下新构成的数字并判断下大小就可以了 注意到 \(L,R\) 数据范围特别大,需

10.22 模拟赛

10.22 模拟赛 T1 染色 考虑每个连通块删成一棵树就好了. mmp场上就我路径压缩写炸.... #include<iostream> #define MAXN 200006 using namespace std; int n , m; int fa[MAXN] , siz[MAXN] , book[MAXN] , sz[MAXN]; int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } int main() {

10.5模拟赛

这么多模拟赛都没整理,能整理一天算一天吧qaq T1题面 sol:应该不难吧,分别对横坐标和纵坐标取差的绝对值,易知:如果互质就可以看到,否则就不行.然后出题人很毒瘤要用unsigned long long. #include <cstdio> #include <algorithm> using namespace std; long long x1,y1,x2,y2,c1=0,c2=0; unsigned long long x,y; unsigned long long AB

10 01模拟赛订正

好吧,这是我第一次写模拟赛的订正,主要是有时间而且这次的题确实好... 第一题确实好,用的算法人人都会,就是看你能不能想到,我考只打了O(n^4)的暴力,最后还苦逼的MLE,爆零了... 暴力就不多说了...枚举两个点更新其他的点... 其实我考场上思考的是,能被标记的点都与其他的点有什么联系,可惜,除了模拟题目的做法,就不会了... 那让我们就认真地思考一发:我们设A(x1,x2),B(x2,c2),C(x3,c3)来更新D点,只有:有两个点横坐标相等,有两个点纵坐标相等,才可以更新出来一个新

10.1 模拟赛

由于算错了inf 又ak失败了 过于菜 T1 年轮蛋糕 loj 2758 题目大意: n个数构成的环 把这个环分成三段 使最小的最大 求这个最小段的和的最大值 思路: 可以想到二分 因为log方可以过 所以可以二分长度后lower_bound找断点 或者使用滑动窗口 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cma

10.27 模拟赛

这一次终极被吊打 甚至没进前十 T2 最后改错 T3 没写正解 T1 elim 题目大意: n 行 m 列的游戏棋盘,一行或一列上有连续 三个或更多的相同颜色的棋子时,这些棋子都被消除 当有多处可以被消除时,这些地方的棋子将同时被消除 求消除后的棋盘 思路: sb模拟 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<cm

2019.10.24模拟赛赛后总结

本文原创,如果有不到位的地方欢迎通过右下角的按钮私信我! A.Icow Player 题目描述 被无止境的农活压榨得筋疲力尽后,Farmer John打算用他在MP3播放器市场新买的iCow来听些音乐,放松一下.FJ的iCow里存了N(1 <= N <= 1,000)首曲子,按1..N依次编号.至于曲子播放的顺序,则是按一个Farmer John自己设计的算法来决定: * 第i首曲子有一个初始权值R_i(1 <= R_i <= 10,000). * 当一首曲子播放完毕,接下来播放的