首页 > 其他分享 >Codeforces Round 914 (Div. 2)

Codeforces Round 914 (Div. 2)

时间:2023-12-10 19:55:19浏览次数:33  
标签:int Codeforces long back path push 914 Div define

Codeforces Round 914 (Div. 2)

A. Forked!

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;

void solve(){
    int a,b;
    int x,y;
    cin>>a>>b>>x>>y;
    map<pair<int,int>,int> board;
    vector<pair<int,int>> path;
    path.push_back({a,b});
    path.push_back({-a,b});
    path.push_back({a,-b});
    path.push_back({-a,-b});
    path.push_back({b,a});
    path.push_back({-b,a});
    path.push_back({b,-a});
    path.push_back({-b,-a});
    for(auto [u,v]:path) board[{x+u,y+v}]=1;
    int ans=0;
    cin>>x>>y;
    for(auto [u,v]:path){
        ans += (board[{x+u,y+v}]>0);
        board[{x+u,y+v}]--;
    }
    cout<<ans<<endl;
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T=1;
    cin>>T;
    while(T--) solve();
    return 0;
}

B. Collecting Game

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;

const int N = 1e5 + 10;
int pre[N];
int ans[N];

void solve(){
    int n;
    cin>>n;
    vector<pair<int,int>> a;
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        a.push_back({x,i+1});
    }
    sort(a.begin(),a.end());
    pre[0]=a[0].first;
    for(int i=1;i<n;i++) pre[i] = pre[i-1] + a[i].first;
    vector<int> idx;
    idx.push_back(-1);
    for(int i=1;i<n;i++)
        if(a[i].first>pre[i-1])idx.push_back(i-1);
    if(idx.back()!=n-1)idx.push_back(n-1);
    for(int i=1;i<idx.size();i++)
    {
        int l=idx[i-1];
        int r=idx[i];
        int len = r;
        //cout<<l<<" "<<r<<endl;
        for(int j=l+1;j<=r;j++)
        {
            ans[a[j].second] = len;
            //cout<<ans[a[j].second]<<" "<<len<<endl;
        }
    }
    for(int i=1;i<=n;i++)
        cout<<ans[i]<<" ";
    cout<<endl;
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T=1;
    cin>>T;
    while(T--) solve();
    return 0;
}

C. Array Game

暴力

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;

const int N = 2e3 + 10;
int a[N];
int n,k;

void solve(){
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);
    if(k>=3){
        cout<<0<<endl;
        return;
    }
    if(k==1){
        priority_queue<int,vector<int>,greater<int>> path;
        for(int i=1;i<=n;i++)
            for(int j=i+1;j<=n;j++)
                path.push(abs(a[i]-a[j]));
        cout<< min(path.top() , a[1]) <<endl;
        return;
    }
    vector<int> b;
    for(int i=1;i<=n;i++)
           for(int j=i+1;j<=n;j++)
            b.push_back(abs(a[i]-a[j]));
    sort(b.begin(),b.end());
    priority_queue<int,vector<int>,greater<int>> path;
    for(int i=1;i<=n;i++){
        int idx=lower_bound(b.begin(),b.end(),a[i])-b.begin();
        if(idx<b.size())path.push(abs(a[i]-b[idx]));
        if(idx>0) path.push(abs(a[i]-b[idx-1]));
    }
    cout<<min({a[1],b[0],path.top()})<<endl;
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T=1;
    cin>>T;
    while(T--) solve();
    return 0;
}

D2. Set To Max

好像又是个线段树啊。等考完试有时间我一定好好补。

ST表感觉不太实用,不太想写。

算了我还是搓个线段树吧,好久没写过了感觉都生疏了。

还是挺简单的,不涉及区间修改的话

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;

const int N = 2e5 + 10;
struct Node{
    int l,r;
    int val;
}maTree[N*3],miTree[N*3];

void build(int i,int l,int r){
    maTree[i].l = l;
    maTree[i].r = r;
    maTree[i].val = 0;

    miTree[i].l = l;
    miTree[i].r = r;
    miTree[i].val = 0;

    if(l==r) return;
    int mid = l + r >> 1;
    build(i<<1,l,mid);
    build((i<<1)|1,mid+1,r);
}

void update1(int i,int k,int val){
    if(maTree[i].l==k&&maTree[i].r==k){
        maTree[i].val = val;
        return;
    }
    int mid = (maTree[i].l + maTree[i].r) >> 1;
    if(k<=mid) update1(i<<1,k,val);
    else       update1((i<<1)|1,k,val);
    maTree[i].val = max(maTree[i<<1].val , maTree[(i<<1)|1].val);
}

int query1(int i,int l,int r){
    if(maTree[i].l == l && maTree[i].r == r) return maTree[i].val;
    int mid = (maTree[i].l + maTree[i].r) >> 1;
    if(r<=mid) return query1(i<<1,l,r);
    else if(l > mid) return query1((i<<1)|1,l,r);
    else return max(query1(i<<1,l,mid),query1((i<<1)|1,mid + 1,r));
}

void update2(int i,int k,int val){
    if(miTree[i].l==k&&miTree[i].r==k){
        miTree[i].val = val;
        return;
    }
    int mid = (miTree[i].l + miTree[i].r) >> 1;
    if(k<=mid) update2(i<<1,k,val);
    else       update2((i<<1)|1,k,val);
    miTree[i].val = min(miTree[i<<1].val , miTree[(i<<1)|1].val);
}

int query2(int i,int l,int r){
    if(miTree[i].l == l && miTree[i].r == r) return miTree[i].val;
    int mid = (miTree[i].l + miTree[i].r) >> 1;
    if(r<=mid) return query2(i<<1,l,r);
    else if(l > mid) return query2((i<<1)|1,l,r);
    else return min(query2(i<<1,l,mid),query2((i<<1)|1,mid + 1,r));
}

int a[N],b[N];
int n;

void solve(){
    cin>>n;
    build(1,1,n);
    vector<vector<int>> path(n+1);
    for(int i=1;i<=n;i++) path[i].push_back(0);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        path[a[i]].push_back(i);
        update1(1,i,a[i]);
    }
    for(int i=1;i<=n;i++){
        cin>>b[i];
        update2(1,i,b[i]);
        path[i].push_back(n+1);
    }
    for(int i=1;i<=n;i++)
        if(a[i]>b[i])
        {
            cout<<"NO"<<endl;
            return;
        }
    for(int i=1;i<=n;i++){
        if(a[i]!=b[i]){
            int idx=lower_bound(path[b[i]].begin(),path[b[i]].end(),i)-path[b[i]].begin();
            int r=path[b[i]][idx];
            int l=path[b[i]][idx-1];
            bool ok=false;
            if(r!=n+1&&query1(1,i,r) <= b[i] && query2(1,i,r)>=b[i])   ok=true;
            if(!ok&&l!=0&& query1(1,l,i) <= b[i] && query2(1,l,i)>=b[i]) ok=true;
            if(!ok){
                cout<<"NO"<<endl;
                return;
            }
        }
    }
    cout<<"YES"<<endl;
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int T=1;
    cin>>T;
    while(T--) solve();
    return 0;
}

标签:int,Codeforces,long,back,path,push,914,Div,define
From: https://www.cnblogs.com/zfxyyy/p/17893124.html

相关文章

  • [Codeforces] CF1793C Dora and Search
    CF1793CDoraandSearch题意给定一个长度为\(n\)的排列\(a\),问是否存在正整数\(l,r\)使得\(a_l,a_r\)均不为\(a_{l...r}\)中的最大值或最小值。思路很明显的双指针,虽然我最开始的思路是二分预处理当前序列的最大值和最小值,并且一旦两段的\(l,r\)中有一个是最大或......
  • [Codeforces] CF1790D Matryoshkas
    CF1790DMatryoshkas题意ZYH的玩具有很多种类,每种玩具都是一段连续的区间(如\([3,4,5]\))ZYH有很多种玩具,但是他不慎把所有玩具的元素乱序混合到了一起。例如玩具\([1,2,3,4]\)和玩具\([2,3]\)混合到一起后可能是\([2,2,3,4,3,1]\)。给定混合后的序列\(a\),SA想知道Z......
  • Codeforces Round 803 (Div. 2)
    基本情况A题秒了。B题经典+2。(经典不开longlong)C题读错题,没得思路。B.RisingSandProblem-B-Codeforces思路好想,分类讨论找规律就行。这里还是要强调一下认真分析数据:InputThesecondlineofeachtestcasecontains\(n\)integers\(a_1,a_2,\ldots,a_n\)......
  • Codeforces Round 914 (Div. 2)
    基本情况脑子最卡的一集。A题读假题,卡了快一小时。B题代码太复杂,出错不好修改,一直调。虽然最后都出来了,但是没有剩下任何时间看后面题目了。A.Forked!Problem-A-Codeforces一开始不知道犯得什么病,觉得可以斜着走一格算作一步,然后情况就太多了,非常不好处理。后面突......
  • Codeforces Round 914 (Div. 2)
    C.ArrayGame题意:给定一个n的数组以及k的操作数,每次可以选择下表为i,j(i<j)得到一个abs(a[i]-a[j])的数放在数组末尾,问你k次操作后,数组中最小的数是多少?思路:首先k>=3选相同的下表两次,一定结果是0,是最小。k==1遍历出下表两两相减的绝对值最小以及本身数组中最小的即可k==2要将数......
  • CodeForces 1902F Trees and XOR Queries Again
    洛谷传送门CF传送门如果我们能把\(x\toy\)路径上的所有点权插入到线性基,那么可以\(O(\logV)\)查询。但是因为线性基合并只能\(O(\log^2V)\)(把一个线性基的所有元素插入到另一个),所以只能倍增做\(O((n+q)\logn\log^2V)\),过不了。考虑\(O(n\logV)\)预处理出......
  • Codeforces Round 904 (Div. 2)
    [CodeforcesRound904(Div.2)](https://codeforces.com/contest/1894)A.SimpleDesign暴力就行了1e9跑不满的#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve(){intx,k;cin>>x>>......
  • 如何设置div内的模块靠左显示,模块内容按行显示?
    要设置一个div内的模块靠左显示,并且模块内容按行显示,你可以使用CSS中的flexbox布局来实现。以下是一种可能的解决方案:HTML结构:<divclass="container"><divclass="module">模块1</div><divclass="module">模块2</div><divclass="module"&g......
  • Codeforces Round 801 (Div. 2)
    基本情况A就开始犯病,导致+2.B、C都过样例了,但是都错。B.CircleGame赛时推出来奇数必输,也知道偶数不是必赢,但是思路不清楚。这里我没意识到一个很关键的性质。奇数堆拿的石堆会变,这也导致了必输,比如三个堆\(1,2,3\)。表粗的为JOE。123123显然JOE拿的石堆是变化的......
  • [Codeforces] CF1763B Incinerate
    CF1763BIncinerate题意为了消灭人类,怪物协会向地球表面派出了\(n\)只怪兽。第\(i\)只怪物有一个生命值\(h_i\)和一个攻击力\(p_i\).凭借他最后的一击,真螺旋焚烧炮,Genos可以对所有活着的怪物造成\(k\)点伤害。换句话说,Genos可以通过一次攻击降低所有怪物\(k\)点......