Codeforces Round 820 (Div. 3) 中英双语题解(Updating)

A. Two Elevators 

原题链接:Problem - A - Codeforces

题目大意:有两台电梯

题目做法:

AC代码:

#include<bits/stdc++.h>
#define pb(element) push_back(element)
#define fast ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//#define int long long
#define ll long long
//Cara's templet version 1.17
//2024/2/17 13:27 UTC+8
//I'M BACK
using namespace std;
const int maxn=2e5+10;
void solve()
{
    int a,b,c;
    cin>>a>>b>>c;
    if((a-1)<abs(b-c)+(c-1)) cout<<1<<'\n';
    else if((a-1)>abs(b-c)+(c-1)) cout<<2<<'\n';
    else cout<<3<<'\n';
}
signed main()
{
    fast int casen=1;
    cin>>casen;
    while(casen--) solve();
}

B. Decode String

原题链接:Problem - B - Codeforces

题目大意:

题目做法:

AC代码:

#include<bits/stdc++.h>
#define pb(element) push_back(element)
#define fast ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//#define int long long
#define ll long long
//Cara's templet version 1.17
//2024/2/17 13:27 UTC+8
//I'M BACK
using namespace std;
const int maxn=2e5+10;
void solve()
{
    int n;
    vector<char> res;
    string str;
    cin>>n;
    cin>>str;
    for(int i=str.length()-1;i>=0;i--)
    {
        if(str[i]=='0')
        {
            res.pb((10*(str[i-2]-'0')+str[i-1]-'0'-1+'a'));
            //cout<<(10*(str[i-2]-'0')+str[i-1]-'0')<<'\n';
            i-=2;
        }
        else res.pb(str[i]-'0'-1+'a');
    }
    for(int i=res.size()-1;i>=0;i--)
    {
        cout<<res[i];
    }
    cout<<'\n';
}
signed main()
{
	fast int casen=1;
	cin>>casen;
	while(casen--) solve();
}

C. Jumping on Tiles

原题链接:Problem - C - Codeforces

题目大意:

给你一个字符串,要求你从这个字符串的头跳到这个字符串的尾端,每次跳的花费是the index of the letter in the alphabet的差值的绝对值,要求总花费最小的前提下,跳的步数尽可能得多。

题目思路:

首先跳跃的字母序列不可以忽上忽下,因为这样的话相当于有的距离本来只用走一遍走了两遍,所以这个跳跃的字母序列要单调,取决于头节点和尾节点的大小关系。

如果头节点在字母表中的索引大于尾节点,则单调递减

如果小于,则单增

如果相等,那么只能条约键值相等的值,

题目做法:

AC代码:

#include<bits/stdc++.h>
#define pb(element) push_back(element)
#define fast ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
//#define int long long
#define ll long long
//Cara's templet version 1.18
//2024/2/20 20:32 UTC+8
//Tell u what when the time I see someone
//Even that I can't see the clear of which
//I still can feel sth different
using namespace std;
const int maxn=2e5+10;
struct node
{
    int ps;
    char content;
};
bool cmp1(node x,node y)
{
    if(x.content==y.content) return x.ps<y.ps;
    return x.content>y.content;
}
bool cmp2(node x,node y)
{
    if(x.content==y.content) return x.ps<y.ps;
    return x.content<y.content;
}
void solve()
{
    string str;
    cin>>str;
    vector<int> res;
    int i;
    node ar[str.length()-1];
    for(int i=0;i<str.length();i++)
    {
        ar[i].ps=i;
        ar[i].content=str[i];
    }
    if(str[0]>=str[str.length()-1])
    {
        sort(ar,ar+str.length(),cmp1);
        for(i=0;i<str.length();i++)
        {
            if(ar[i].ps==0) break;
        }
        for(;i<str.length();i++)
        {
            res.pb(ar[i].ps+1);
            if(ar[i].ps+1==str.length())
            {
                break;
            }
        }
    }
    else
    {
        sort(ar,ar+str.length(),cmp2);
        for(i=0;i<str.length();i++)
        {
            if(ar[i].ps==0) break;
        }
        for(;i<str.length();i++)
        {
            res.pb(ar[i].ps+1);
            if(ar[i].ps+1==str.length())
            {
                break;
            }
        }
    }
    cout<<abs(str[0]-str[str.length()-1])<<" "<<res.size()<<'\n';
    for(i=0;i<res.size();i++)
    {
        cout<<res[i]<<' ';
    }
    cout<<'\n';
}
signed main()
{
	fast int casen=1;
	cin>>casen;
	while(casen--) solve();
}

D. Friends and the Restaurant

原题链接:Problem - D - Codeforces

题目大意:

题目思路:

题目做法:

AC代码:

#include<bits/stdc++.h>
#define pb(element) push_back(element)
#define fast ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
#define ll long long
//Cara's templet version 1.19
//2024/2/20 20:32 UTC+8
//Blood Toil Tears Sweat
using namespace std;
const int maxn=3e5+10;
struct node
{
    int x,y;
};
bool cmp(int x,int y)
{
    return x>y;   
}
void solve()
{
    int n,res=0;
    cin>>n;
    node ar[n];
    vector<int> a1,a2;
    for(int i=0;i<n;i++)
    {
        cin>>ar[i].x;
    }
    for(int i=0;i<n;i++)
    {
        cin>>ar[i].y;
        int t=ar[i].y-ar[i].x;
        if(t>=0) a1.pb(t);
        else a2.pb(t);
    }
    sort(a1.begin(),a1.end());
    sort(a2.begin(),a2.end(),cmp);
    // for(auto it:a1)
    // {
    //     cout<<it<<' ';
    // }
    // cout<<'\n';
    // for(auto it:a2)
    // {
    //     cout<<it<<' ';
    // }
    // cout<<'\n';
    int inips1=0,inips2=0,allpos=a1.size();
    while(inips1<a1.size()&&inips2<a2.size())
    {
        if(a1[inips1]>=abs(a2[inips2])) res++,inips1++,inips2++,allpos--;
        else
        {
            inips1++;
        }
    }
    cout<<allpos/2+res<<'\n';
}
signed main()
{
    fast int casen=1;
	cin>>casen;
	while(casen--) solve();
}

Last Update Date 2024/2/20 20:57 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值