首页 > 其他分享 >AtCoder Beginner Contest 047

AtCoder Beginner Contest 047

时间:2023-01-18 18:23:06浏览次数:37  
标签:AtCoder ch cout Beginner int res read 047 using

A - Fighting over Candies

签到

#include <bits/stdc++.h>
using namespace std;

int read(){...}

const int N = 1e6+5;

int main(){
    int a = read() , b = read() , c = read();
    if( a < b ) swap( a , b );
    if( a < c ) swap( a , c );
    if( a == b + c ) cout << "Yes";
    else cout << "No";
    return 0;
}

B - Snuke's Coloring 2 (ABC Edit)

如果你会两个矩形求交集的话,这题其实非常简单。

#include <bits/stdc++.h>
using namespace std;

int read(){...}

const int N = 1e6+5;

int main(){
    int ax = 0 , ay = 0 , bx = read() , by = read() , n = read();
    for( int x , y , t ; n ; n -- ){
        x = read() , y = read() , t = read();
        if( t == 1 ) ax = max( ax , x );
        else if( t == 2 ) bx = min( bx , x );
        else if( t == 3 ) ay = max( ay , y );
        else by = min( by , y );
    }
    cout << max( 0 , bx - ax ) * max( 0 , by - ay ) ;
    return 0;
}

C - 1D Reversi

相邻且相同的可以合并成一个,题目的操作实际上就可以转化成再序列的两端选择一个删除,题目的目标就是希望最后只剩下一个,所以就是求一下将相邻且相同的合并后序列的长度即可。

#include <bits/stdc++.h>
using namespace std;

int read(){...}

const int N = 1e6+5;

int main(){
    string s;
    cin >> s;
    int res = -1 , t = -1;
    for( auto c : s ){
        if( c == 'B' && t != 1 ) t = 1 , res ++;
        if( c == 'W' && t != 0 ) t = 0 , res ++;
    }
    cout << res ;
    return 0;
}

D - An Invisible Hand

这题蛮有意思的,题目中的t是一个诈骗条件,没有用。

然后对于每一个点购入,最优策略就是再之后的最大值时卖出。所以要求一下后缀最大值,有了后缀最大值就可以\(O(n)\)求出每一个位置的最优策略,整体最优解的方案数。

因为题目保证了原序列不会重复(赛时一开始没看到),所以不存在改变一个值减少大于一个最优解的情况,所以最优解的方案数就是我们要花费的最小代价。

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
int read(){
    int x = 0 , f = 1 , ch = getchar();
    while( (ch < '0' || ch > '9') && ch != '-' ) ch = getchar();
    if( ch == '-' ) f = -1 , ch = getchar();
    while( ch >= '0' && ch <= '9' ) x = ( x << 3 ) + ( x << 1 ) + ch - '0' , ch = getchar();
    return x * f;
}

const int N = 1e5+5;
ll a[N] , b[N] , n , res = 0 , vl;


int main(){
    n = read() , read();
    for( int i = 1 ; i <= n ; i ++ ) a[i] = b[i] = read();
    for( int i = n-1 ; i >= 1 ; i -- ) b[i] = max( b[i] , b[i+1] );
    for( int i = 1 , t ; i < n ; i ++ ){
        t = b[i+1] - a[i];
        if( t > vl ) vl = t , res = 1;
        else if( t == vl ) res ++;
    }
    cout << res;
    return 0;
}

标签:AtCoder,ch,cout,Beginner,int,res,read,047,using
From: https://www.cnblogs.com/PHarr/p/17060369.html

相关文章

  • Atcoder ABC 285 题解
    E-WorkorRest题意​ 一周有\(n\)天,给出一个长度为\(n\)的数组\(A\)。你可以决定一周中的休息日与工作日的分布,请问如何选择能够使总贡献最大。​ 如何计算贡献......
  • AtCoder Beginner Contest 285 E(背包dp)
    E-WorkorRest题目大意:给定一周有n天,其中至少有1天为休息日,其余为工作日。同时给定一个长度为n的整型数组A,对于一个工作日,它能产生的工作值为A\(_{min(x,y)}\),其中x......
  • AtCoder Beginner Contest 282(G 填坑dp)
    G-SimilarPermutation题目大意:如果两个排列A=(A\(_1\),A\(_2\),A\(_3\)....A\(_N\)),B=(B\(_1\),B\(_2\),B\(_3\)....B\(_N\))满足:(A\(_i\)-A\(_{i+1}\))(B\(_......
  • AtCoder Regular Contest 153(持续更新)
    PrefaceB题粗糙了改了好几个版本,最后索性从头理了一遍思路才过然后剩下40min想C又歪了(构造题精通的被动消失了),还剩25min的时候忍不住了看LPL去了话说现在的ARC感觉和以......
  • AtCoder Beginner Contest 285
    AtCoderBeginnerContest285题目来源A-EdgeChecker2题意判断一个完全二叉树,两个节点是否直接相连分析\(a=b*2或者a=b*2+1(a<b)a、b\)相连voidsolve(){ ......
  • AtCoder Beginner Contest 285 ——D
    题目:D-ChangeUsernames(atcoder.jp)题解:在所有的s[i]和t[i]之间连接一条有向边,由s[i]指向t[i],连接完之后可以发现,会形成若干条链或者环,如果出现了环那么一定不可以实......
  • Atcoder ABC285 赛后总结
    A—EdgeChecker2传送门题目大意给你一棵树,输入两个\(1-15\)的数\(a,b\),求\(a\)是否是\(b\)老爹父亲这颗树如图:题目解法超级无敌暴力法(wu一种最最最简......
  • AtCoder Beginner Contest 285 题解
    比赛链接:https://atcoder.jp/contests/abc285总体来说不算难。A-C略。\(D\)因为起点终点不同,起点之间、终点之间两两不同,所以有环的情况是错的,其他都是对的。写起来的......
  • AtCoder Beginner Contest 285 解题报告
    AtCoderBeginnerContest285解题报告\(\text{DaiRuiChen007}\)ContestLinkA.EdgeChecker2假设\(a\geb\),当且仅当\(\left\lfloor\dfraca2\right\rfloor=b\)......
  • AtCoder Beginner Contest 285 D - Change Usernames(拓扑排序)
    这题想到可以用map容器将string与一个端点下标对应,再建一个有向图,将问题转换成判断一个有向图是否有环赛后补题网上搜如何判断图是否有环,学到了拓扑排序拓扑排序是什么......