当前位置: 首页 > article >正文

Codeforces Round 980 (Div. 2) A ~ D

Codeforces Round 980 (Div. 2)

A

发现 a ≥ b a \geq b ab 时输出 a a a 即可 ;

否则 a − x ≤ b − 2 x a-x\leq b-2x axb2x ,解得 x m i n = b − a x_{min}=b-a xmin=ba r e s = a − x = 2 a − b res=a-x=2a-b res=ax=2ab ,但是必须 ≥ 0 \geq 0 0

int const N = 1e5 + 10;
int n, m, a, b, c;

void solve(){
    cin >> a >> b;
    if(a >= b){
        cout << a << '\n';
    }
    else{
        cout << (2 * a - b >= 0 ? 2 * a - b : 0) << '\n';
    }
}

B

发现自己的最优策略就是每个可能还有瓶子的卡槽按一遍,如此循环重复。

对于一个 0 0 0 的卡槽,必须还要按一次才知道他是空的。

因为每次看最小卡槽有多好少即可,所以数组 O ( n ) O(n) O(n) 模拟一下即可。

int const N = 2e5 + 10;

int n, k, a[N];

void solve(){    
    cin >> n >> k;
    for(int i = 1; i <= n; i ++){
        cin >> a[i];
    }
    sort(a + 1, a + n + 1);
    int res = 0, s = 0, idx = 1;
    while(k){
        int now = a[idx] - s;
        if(now == 0 && k){
            idx ++;
            res ++;
            continue ;
        }
        if(now * (n - idx + 1) >= k){
            res += k;
            break;
        }
        k -= now * (n - idx + 1);
        res += now * (n - idx + 1);
        s += now;
    }
    cout << res << '\n';
}

C

对于 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2) ,考虑交换他们,发现内部的逆序对不会变,所以考虑两个元素之间的即可。假设 m x 1 ≠ m x 2 mx_1\neq mx_2 mx1=mx2 ,将最大值所在的元素放在左边,最多两个逆序对,而最大值所在的放在右边,最少两个逆序对。假设 m x 1 = m x 2 mx_1=mx_2 mx1=mx2 ,让 m n mn mn 小的放在左边。

int n;

int const N = 1e5 + 10;

struct node{
	int x, y;
}a[N];

bool cmp(const node & a, const node & b){
	if(max(a.x, a.y) != max(b.x, b.y)) return max(a.x, a.y) < max(b.x, b.y);
	return min(a.x, a.y) < min(b.x, b.y);
}

void solve(){
	int n;
	cin >> n;
	for(int i = 1; i <= n; i ++){
		cin >> a[i].x >> a[i].y; 
    }
    sort(a + 1, a + n + 1, cmp);
    for(int i = 1; i <= n; i ++){
    	auto [x, y] = a[i];
    	cout << x << ' ' << y << ' ';
    }
    cout << '\n';
}

D

d p i dp_i dpi 为从 1 1 1 走到 i i i , 让多少点无效的最小值。

注意到 b i ≤ i b_i \leq i bii ,这种点忽略它没有意义,一定不如直接拿了分数往左考虑优。

因此只考虑 b i > i b_i>i bi>i 的点。

维护每个点的忽略代价,以及跳跃到的位置,小根堆维护。

对于 d p i dp_i dpi ,就等于所有 p o s ≥ i pos\geq i posi 的最小代价。

void solve(){
	int n;
	cin >> n;

	vector<int> dp(n + 1, 1e18);
	vector<int> a(n + 1), b(n + 1);
	for(int i = 1; i <= n; i ++){
		cin >> a[i];
    }	
    for(int i = 1; i <= n; i ++){
    	cin >> b[i];
    } 
    priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > heap;
    dp[1] = 0;
    for(int i = 1; i <= n; i ++){
    	while(heap.size() && b[heap.top().second] < i) heap.pop();
    	if(heap.size()) dp[i] = heap.top().first;
    	heap.push({dp[i] + a[i], i});
    }
    int res = 0, pre = 0;
    for(int i = 1; i <= n; i ++){
    	pre += a[i];
    	res = max(res, pre - dp[i]);
    }
    cout << res << '\n';
}

http://www.kler.cn/news/359894.html

相关文章:

  • 小程序将图片转换成base64格式
  • Mysql-事务(Transaction)详解
  • pod相关面试题总结(持续更新)
  • 【ARM】ARM架构参考手册_Part A CPU(1)
  • 【BUG】解决已安装anaconda的pycharm中jupyter服务器中出现的import jieba失败问题
  • SpringBoot启动报错java.nio.charset.MalformedInputException: Input length =1
  • SAP揭秘者-怎么查看SAP 版本及S4 HANA的版本
  • 开启RefCell debug_refcell feature查看借用冲突位置
  • PCL 基于中值距离的点云对应关系
  • linux模拟:chrony同步时间
  • 信创:推动信息技术应用创新的国产化之路
  • react18中在列表中如何使用useCallback进行渲染优化
  • 大模型的检索增强生成综述研究
  • 利用TLP185光耦合器增强电路隔离和信号完整性
  • (AtCoder Beginner Contest 375) 题解(下)
  • 408 10——42题
  • [英语单词] sk_under_memory_pressure
  • MySQL 初阶——多版本控制 MVCC
  • Tkinter -- python GUI学习与使用
  • 1.前提配置 关防火墙 关selinux