首页 > 其他分享 >hey_left 15 Codeforces Round 835 (Div. 4)

hey_left 15 Codeforces Round 835 (Div. 4)

时间:2024-01-24 21:57:50浏览次数:31  
标签:15 835 int Codeforces long hey -- solve left

题目链接

A.

总和-最小值-最大值即为中间数

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

#define int long long
void solve(){
    int a,b,c;cin>>a>>b>>c;
    cout<<a+b+c-min({a,b,c})-max({a,b,c})<<'\n';
}

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

B.

遍历,记录最大字符

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

#define int long long
void solve(){
    int n;cin>>n;
    string s;cin>>s;
    int ans=0;
    for(int i=0;i<s.size();i++){
        if(s[i]-'a'>ans){
            ans=s[i]-'a';
        }
    }
    cout<<ans+1<<'\n';
}

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

C.

若最大值不止一个,那么每个数与最大值的差就是答案
若最大值只有一个,那么还要一个次大值,最大值的答案是最大值与次大值的差

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

#define int long long
void solve(){
    int n;cin>>n;
    vector<int>s(n+1);
    int ma=-1,cnt=0,maa=-1;
    for(int i=1;i<=n;i++){
        cin>>s[i];
        if(s[i]>ma){
            maa=ma;
            ma=s[i];
            cnt=1;
        }else if(s[i]==ma){
            cnt++;
        }else if(s[i]>maa)maa=s[i];
    }
    for(int i=1;i<=n;i++){
        if(s[i]==ma){
            if(cnt>1){
                cout<<0<<' ';
            }else cout<<s[i]-maa<<' ';
        }else cout<<s[i]-ma<<' ';
    }
    cout<<'\n';
}

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

D.

可以把边界设为无穷大
若出现一个数比前一个数小,再出现一个数比前一个数大,则山谷+1
若山谷大于1,则是NO

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

#define int long long
void solve(){
    int n;cin>>n;
    vector<int>a(n+5);
    for(int i=1;i<=n;i++)cin>>a[i];
    a[n+1]=0x3f3f3f3f;
    int cnt=0;
    bool f=0;
    for(int i=2;i<=n+1;i++){
        if(a[i]>a[i-1]){
            if(f==0){
                cnt++;
                f=1;
            }
        }else if(a[i]==a[i-1]){
            continue;
        }
        else f=0;
    }
    if(cnt==1){
        cout<<"YES"<<'\n';
    }else cout<<"NO"<<'\n';
}

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

E.

要让反转数多,就是尽量1都在前面,0都在后面
那么我们把第一个0变成1或把最后一个1变成0,或者不变
3种情况分别讨论,取最大反转数

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

#define int long long
void solve(){
    int n;cin>>n;
    vector<int>a(n+1),b(n+1),c(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[i]=a[i];
        c[i]=b[i];
    }
    for(int i=1;i<=n;i++){
        if(a[i]==0){
            a[i]=1;
            break;
        }
    }
    int sum1=0,cnt_1=0;
    for(int i=1;i<=n;i++){
        if(a[i]==1)cnt_1++;
        else sum1+=cnt_1;
    }
    for(int i=n;i>=1;i--){
        if(b[i]==1){
            b[i]=0;
            break;
        }
    }
    cnt_1=0;
    int sum2=0;
    for(int i=1;i<=n;i++){
        if(b[i]==1)cnt_1++;
        else sum2+=cnt_1;
    }
    int sum3=0;
    cnt_1=0;
    for(int i=1;i<=n;i++){
        if(c[i]==1)cnt_1++;
        else sum3+=cnt_1;
    }
    cout<<max({sum2,sum1,sum3})<<'\n';
}

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

F.

d天都用最大值都不够,就是不可能
min(d,n)的所有值加起来,也就是无需重复使用,那么是无穷大
其余情况二分天数

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

#define int long long
const int N=2e5+10;
bool cmp(int x,int y){
    return x>y;
}
void solve(){
    int n,c,d;cin>>n>>c>>d;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a.begin()+1,a.end(),cmp);
    if(a[1]*d<c){
        cout<<"Impossible"<<'\n';
        return ;
    }
    int sum=0;
    vector<int>pre(n+1);
    for(int i=1;i<=min(n,d);i++){
        sum+=a[i];
        pre[i]=pre[i-1]+a[i];
    }
    if(sum>=c){
        cout<<"Infinity"<<'\n';
        return ;
    }
    int l=0,r=N,mid;
    int ma=-1;
    while(l<=r){
        mid=(l+r)/2;
        int x=d%(mid+1);
        if(pre[min(n,x)]+d/(mid+1)*pre[min(n,mid+1)]>=c){
            l=mid+1;
            ma=max(ma,mid);
        }
        else r=mid-1;
    }
    cout<<ma<<'\n';
}

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

G.

分别以a,b为起点搜一遍,记录出现的异或结果
若有的值出现了2次及以上,则可以
注意a搜到b的时候要跳过
注意特判,初始mp[0]=1

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

#define int long long
const int N=1e5+10;
map<int,int>mp;
vector<pair<int,int>>g[N];
int n,a,b;
void dfs1(int u,int fa,int res){
    for(int i=0;i<g[u].size();i++){
        int y=g[u][i].first;
        if(y==fa)continue;
        if(y==b)continue;
        mp[res^g[u][i].second]++;
        dfs1(y,u,res^g[u][i].second);
    }
}
bool f=0;
void dfs2(int u,int fa,int res){
    for(int i=0;i<g[u].size();i++){
        int y=g[u][i].first;
        if(y==fa)continue;
        if(mp[res^g[u][i].second]){
            f=1;return ;
        }
        dfs2(y,u,res^g[u][i].second);
    }
}
void solve(){
    mp.clear();
    mp[0]++;
    cin>>n>>a>>b;
    for(int i=1,u,v,w;i<n;i++){
        cin>>u>>v>>w;
        g[u].push_back({v,w});
        g[v].push_back({u,w});
    }
    f=0;
    dfs1(a,0,0);
    dfs2(b,0,0);
    if(f){
        cout<<"YES"<<'\n';

    }else cout<<"NO"<<'\n';
    for(int i=1;i<=n;i++)g[i].clear();

}

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

标签:15,835,int,Codeforces,long,hey,--,solve,left
From: https://www.cnblogs.com/wwww-/p/17983275

相关文章

  • Codeforces Round 170 (Div. 1)A. Learning Languages并查集
    如果两个人会的语言中有共同语言那么他们之间就可以交流,并且如果a和b可以交流,b和c可以交流,那么a和c也可以交流,具有传递性,就容易联想到并查集,我们将人和语言看成元素,一个人会几种语言的话,就将这些语言和这个人所在的集合合并,最后求一下人一共在几个连通块中,连通块的个数-1就是答案,......
  • P1536 村村通(并查集)
    村村通题目描述某市调查城镇交通状况,得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要相互之间可达即可)。请你计算出最少还需要建设多少条道路?输入格式输入包含若干......
  • CodeForces 1010F Tree
    洛谷传送门CF传送门educational的。另一道类似的题是[ABC269Ex]Antichain(但是我还没写)。考虑令\(b_u=a_u-\sum\limits_{v\inson_u}a_v\)。那么\(\sum\limits_{i=1}^nb_i=a_1=x\),且\(\foralli\in[1,n],b_i\ge0\)。所以最后连通块内有\(y\)个点,那......
  • 洛谷题单指南-模拟和高精度-P1591 阶乘数码
    原题链接:https://www.luogu.com.cn/problem/P1591题意解读:此题核心就是通过高精度*低精度计算阶乘,然后统计数码个数即可,直接给出代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;vector<int>mul(vector<int>&a,intb){vector<int>result;intt......
  • Java开发者的Python快速进修指南:探索15种独特的Python特殊方法
    概述在Python中,特殊方法(也称为魔术方法)是由Python解释器自动调用的,我们不需要手动调用它们,而是使用内置函数来间接地使用它们。举个例子,我们可以实现特殊方法__len__(),然后通过使用内置函数len()来获取对象的长度。同样地,一些特殊方法的调用是隐式的,比如在使用for循环时,实际上是......
  • 「杂题乱刷」P1558
    好久没写cnblog了,来写一下。做一下恢复训练。P1558(色板游戏)数据结构板子题?反正我一开始是不知道怎么去维护的。反正我代码分块写的跟线段树一样思路大致是把图的颜色化成二进制,然后就很好做了,注意更新时记得顺便维护答案。给大家几个样例来调代码:hack1in:100302C1......
  • 寒假生活指导15
    #相关模块导入fromseleniumimportwebdriver#selenium4版本必须要设置浏览器选项,否则会闪退option=webdriver.EdgeOptions()option.add_experimental_option("detach",True)#实例化浏览器驱动对象,并将配置浏览器选项driver=webdriver.Edge(options=option)#......
  • hey_left 14 Codeforces Round 849 (Div. 4) 续
    题目链接F.区间修改,单点查询,考虑用树状数组可以维护每个点需要操作的次数然后直接对询问的点进行操作#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+10;#defineintlonglongstructTreeArray{vector<int>tree;TreeArray(intn){......
  • [转帖]ORA-01450 maximum key length (3215) exceeded
    一、问题背景给一个业务表online建索引时遇到了ORA-01450maximumkeylength(3215)exceeded报错,看字面意思是字段太长了,检查表字段类型发现基本都是nvarchar2(2000),有些字段(例如unit)明显是不需要这么长的,表的设计有问题,联系开发按实际需求改短后能正常创建。奇怪的是表的......
  • P5015 [NOIP2018 普及组] 标题统计
    1.题目介绍[NOIP2018普及组]标题统计题目背景NOIP2018普及组T1题目描述凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。输入格式输入文件只有一行,......