2024-04-12练习赛——S12678

                                一,题目报告

             赛中得185分,赛后AK。

                                二,赛中报告

T1,三角形分割

是一道签到题。

T2,魔法塔

是一道贪心题。

T3,数字加倍

是一道宽搜题

T4,不合法字符串

一道枚举题

                                三,题目解析

T1:

题目大意

小可是一名年轻有为的建筑师,他在一次勘测任务中遇到了一个有趣的问题。他来到了一个二维平面上的一个面积不为零的三角形,三角形的三个顶点分别是A、B、C。 小可想要判断是否能够在这个三角形上画一条水平或竖直的线,将这个三角形划分为两个面积不为零的三角形。 但是小可不太会写代码,请你帮助小可,使用代码实现这个功能。

输入描述

第一行:输入一个正整数 t ,表示多组测试样例的数量。

对于每组测试样例,在单独的一行中输入6个整数,x​1​​,y​1​​,x​2​​,y​2​​,x​3​​,y​3​​,(x​i​​,y​i​​)表示三个点的坐标。

输出描述

对于每组测试样例,如果能用一条水平或竖直的线,将这个三角形划分为两个面积不为零的三角形,则输出YES,否则输出NO

题目解析

很容易看出来,只要三角形不是直角三角形就输出YES

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    scanf("%d",&n);
    while(n--){
        int a,b,c,d,e,f;
        scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
        if((a!=c&&a!=e&&c!=e)||(b!=d&&b!=f&&d!=f))printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

T2:

题目大意

他必须通过一系列的挑战来提升自己的魔法能力。

挑战的规则是这样的:在每一次挑战中,小可可以选择两个魔法石,其中一个魔法石的能量值比另一个魔法石高。然后,他可以将能量值高的魔法石的能量减少1,并将能量值低的魔法石的能量增加1。小可可以进行任意多次的挑战操作。注意,魔法石的顺序不可以改变,且能量不能小于0。

小可非常聪明,他意识到,通过巧妙地选择挑战操作,他可以使得某个魔法石的能量值变得非常高。他想知道,在经过任意多次的挑战操作后,能够使得第一个魔法石的能量值最高,请问这个最高的能量值是多少。

输入描述

第1行:输入一个正整数 t ,表示多组测试样例的组数。

​ 对于每组测试样例:

​ 第1行:输入一个正整数 n ,表示有 n 个魔法石。

​ 第2行:输入 n 个正整数,表示魔法石的初始能量值 a[i]。

输出描述

对于每组测试样例,输出经过任意次操作后,第一个魔法石能达到的最高能量值。

题目解析

让a[0]最大,要让a[0]与其他魔法石平均,要排序。

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    long long n,a[10001];
    scanf("%d",&t);
    while(t--){
        
        scanf("%lld",&n);
        for(int i=0;i<n;i++)scanf("%lld",&a[i]);
        for(int i=1;i<n;i++){
            if(a[i]>a[0])a[0]+=(a[i]-a[0]+1)/2;
        }
        printf("%lld\n",a[0]);
    }
    return 0;
}

T3:

题目大意

小可是一个数学天才,他喜欢研究数学问题。有一天,他遇到了一个有趣的问题。

问题是这样的:给定两个正整数n和x,小可需要对x进行一系列操作,使得x的位数与n相等,并且操作次数最少。每次操作,小可需要从x的十进制表示中截取一位数字y,然后将y与x相乘得到x’。例如,如果x=123,而小可截取的数字是2,则x’ = 123 * 2 = 246,之后令 x = x’ 。

输入描述

输入两个数字n 和 x ,表述如题

输出描述

输出操作次数的最小值,如果不可能,则输出-1

题目解析

AC代码

#include <bits/stdc++.h>

#include <set>

#define infll 0x3f3f3f3f3f3f3f3f
#define ll long long
#define F first
#define S second
using namespace std;
ll n,k,ans=infll;
queue<pair<ll,ll>> q;
map<ll,ll> m;
set<int> s,nu;
int get(ll x){
    int len=0;
    while(x){
    x/=10;
    len++;
    }
    return len;
}
void bfs(){
    q.push({k,0});
    m[k]=1;
    while(!q.empty()){
    ll u=q.front().F;
    ll step=q.front().S;
    q.pop();
    int len=get(u);
    if (len==n){
ans=step;
return;
}
    if (len>n)continue;
    ll x=u;
    s=nu;
    while (x){
    s.insert(x%10);
    x/=10;
    }
    for (auto i : s){
        if (m[u*i] == 0){
            m[u*i] = 1;
            q.push({u*i,step+1});
        }
    }
    }
}
int main(){
    cin >> n >> k;
    bfs();
    if (ans == infll)ans = -1;
    cout << ans << endl;
    return 0;
}

T4:

题目大意

小可是一名小说审核员,他的工作是看小说,然后把小说中不合法字符串和谐掉。

现在给出若干个不合法的字符串 s[i],和一篇小说 str ,小可需要把 str 中的不合法字符串用 *和谐掉。当然小可是一个很聪明的审核员,他会用最少的 * 和谐字符串。

比如:

​ 有三个不合法字符串:abcaba 。str=abcd

​ 他会只和谐a,使得str=*bcd,这样小说中就没了不合法字符串。

请输出和谐之后的小说。

输入描述

第一行:输入一个整数 T 表示测试用例数。

​ 对于每组测试样例:

​ 第一行:输入一个正整数 n ,表示不合法字符串的数量。

​ 接下来n行:每行输入一个字符串,表示不合法字符串。

​ 接下来一行:输入一个字符串,表示小说。

输出描述

输出和谐之后的小说

题目解析

AC代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    
    int t;
    scanf("%d",&t);
    while(t--){
        ll n;
        scanf("%lld",&n);
        vector<string> v(n);
        for(auto &i:v){
            cin>>i;
        }
        string s;
        cin>>s;
        n=s.size();
        s=" "+s+" ";
        
        
        for(int i=1;i<=n;i++){
            for(auto &j : v){
                if(i-int(j.size())<0){
                    continue;
                }
                if(s.substr(i-j.size()+1,j.size())==j){
                    s[i]='*';
                }
            }
        }
        cout<<s.substr(1,n)<<'\n';
    }
    return 0;
}

                                四,总结

下次比赛把能得的分都得了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值