Educational Codeforces Round 119 (Rated for Div. 2)

A. Equal or Not Equal

题目:

思路分析 :

题目分析可知  只有当有1个N其他都是E时候是无法满足的

代码实现:

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

inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}

ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}

const int MAX=2e6+10;
int t;
bool cmp(int a,int b){return a>b;}
void solve(){
    string s;
    cin>>s;
    int sum=0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='E'){
            sum++;
        }
    }
    if((sum==s.size()-1)){cout<<"NO"<<endl;return;}
    cout<<"YES"<<endl;
}
int main(){
    cin>>t;
    while(t--) solve();
//    solve();
    return 0;
}

B. Triangles on a Rectangle

题目:

思路分析:

因为三个点 其中有二个点在一条边上 我们分析到 可能的情况只有 二个点在一边 另一点在对边上 这是最优的

代码实现:

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

inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}

ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}

const int MAX=2e6+10;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}
void solve(){
    int n;
    ll w,h;cin>>w>>h;
    cin>>n;
    ll l,r;
    for(int i=0;i<n;i++) {
        int x;
        cin>>x;
        if(i==0) l=x;
        if(i==n-1) r=x;
    }
    ll ans1=r-l;
    cin>>n;
    for(int i=0;i<n;i++) {
        int x;
        cin>>x;
        if(i==0) l=x;
        if(i==n-1) r=x;
    }
    ll ans2=r-l;
    cin>>n;
    for(int i=0;i<n;i++) {
        int x;
        cin>>x;
        if(i==0) l=x;
        if(i==n-1) r=x;
    }
    ll ans3=r-l;
    cin>>n;
    for(int i=0;i<n;i++) {
        int x;
        cin>>x;
        if(i==0) l=x;
        if(i==n-1) r=x;
    }
    ll ans4=r-l;
    cout<<max(max(ans1,ans2)*h,max(ans3,ans4)*w)<<endl;
}
int main(){
    cin>>t;
    while(t--) solve();
//    solve();
    return 0;
}

C. BA-String

题目:

思路分析:

就是给你一个模式串 你可以在*位置补0-k个b 让你找出字典序第x小的字符串

我们先让相邻*号 合并 并且将可以贡献的值放入容器中

然后倒着往回推

代码实现:

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

inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}

ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}

const int MAX=2e6+10;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}
void solve(){
    ll n,k,x;
    string s;
    cin>>n>>k>>x>>s;
    string result = "";
    vector<int>v,a;
    string t="";--x;
    for(int i =0;i<(int)s.size();++i){
        t+=s[i];
        if(s[i]=='*'){
            a.push_back(k+1);
            while(s[i+1]=='*'){++i;a.back()+=k;}
        }
    }
    while(x > 0){
        v.push_back(x%a.back());x/=a.back();a.pop_back();
    }
    reverse(t.begin(),t.end());
    int l=0;
    for(int i=0;i<(int)t.size();++i){
        if(t[i]=='*'&&l<v.size()){
            for(int j=0;j<v[l];++j){result+='b';}
            ++l;
        }
        else if(t[i]=='a'){result+="a";}
    }
    reverse(result.begin(),result.end());cout<<result<<endl;
    
}
int main(){
    cin>>t;
    while(t--) solve();
    return 0;
}

E. Replace the Numbers

题目:

思路分析:

简单的从后到前匹配就行

如果遇到2那么就把x匹配成y 遇到1就直接简单的输出就行 

代码实现:

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

inline int read() {
    int x=0,f=1; char c=getchar();
    while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    return x*f;
}
ll _gcd(ll m, ll n){return n == 0 ? m : _gcd(n, m%n);}
ll _lcm(ll m, ll n){return m*n / _gcd(m, n);}
ll pows(ll base, ll power,ll mod){ll result=1;while(power>0){if(power&1){result=result*base%mod;}power>>=1;base=(base*base)%mod;}return result;}

ll poww(ll base, ll power){ll result=1;while(power>0){if(power&1){result=result*base;}power>>=1;base=(base*base);}return result;}

const int MAX=5e5+1;
int t;
bool cmp(int a,int b){return a>b;}
ll max(ll a,ll b){if(a>b)return a;else return b;}
void solve(){
    int n;cin>>n;int p[MAX],o[MAX],d[MAX],a[MAX];
    for(int i=0;i<=MAX;i++) p[i]=i;
    for(int i=1;i<=n;i++){
        cin>>o[i]>>a[i];
        if(o[i]==2)cin>>d[i];
    }
    for(int i=n;i>=1;i--){
        if(o[i]==2) p[a[i]]=p[d[i]];
        else d[i]=p[a[i]];
    }
    for(int i=1;i<=n;i++){if(o[i]==2)continue;else cout<<d[i]<<" ";}
}
int main(){
//    cin>>t;
//    while(t--) solve();
    solve();
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值