gym-101343

gym-101343

A

B

C

D

题记:水题,模拟即可。

#include<bits/stdc++.h>

using namespace std;
const int M=1e9+7;
const int N=1e5+10;
int a[5];
char str[105];
int main(){
    int n;
    cin>>n;
    while(n--){
        cin>>str;
        memset(a,0,sizeof(a));
        for(int i=0;i<strlen(str);i++){
            if(str[i]=='@'||str[i]=='?'||str[i]=='!')
                a[3]++;
            else if(str[i]>='0'&&str[i]<='9')
                a[2]++;
            else
                a[1]++;
        }
        if(a[1]<4)
            cout<<"The last character must be a letter."<<endl;
        else if(a[2]<4)
            cout<<"The last character must be a digit."<<endl;
        else if(a[3]<2)
            cout<<"The last character must be a symbol."<<endl;
        else
            cout<<"The last character can be any type."<<endl;
    }
    return 0;
}

E

题记:这题有点坑…首先字符串不能用字符数组char,要用string。然后累加sum时数会很大,需要长整形。

#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
string s;
int scnt[30];
int main()
{
    cin>>s;
    int maxn=0;
    int len=s.length();
    for(int i=0;i<len;i++)
    {
        scnt[s[i]-97]++;
        if(maxn<scnt[s[i]-97])
            maxn=scnt[s[i]-97];
    }
    int minn=inf;
    int ans=2;
    for(int i=2;i<=maxn;i++)
    {
        long long  t=0;
        for(int j=0;j<26;j++)
            t+=(scnt[j]%i)*(long long )scnt[j];
        if(minn>t)
        {
            minn=t;
            ans=i;
        }
    }
    cout<<ans<<endl;
}

F

题记:我作死正常遍历了一遍,果然超时了…用了二分就ac了。

#include<bits/stdc++.h>

using namespace std;
const int M=1e9+7;
const int N=1e5+10;
int a[N];
int main(){
    int n,m;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    sort(a,a+n);
    int x;
    for(int i=0;i<m;i++){
        scanf("%d",&x);
        int l=0,r=n-1;
        while(l<=r){
            int mid=l+(r-l)/2;
            if(a[mid]<x)
                l=mid+1;
            else
                r=mid-1;
        }
        if(a[l]>=x)
            printf("%d\n",a[l]);
        else
            printf("Dr. Samer cannot take any offer :(.\n");
    }
    return 0;
}

G

题记:模拟即可。

#include<bits/stdc++.h>

using namespace std;
const int M=1e9+7;
const int N=1e5+10;
int main(){
    int n,m;
    cin>>n>>m;
    if(m%n==0)
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
    return 0;
}

H

题记:找出数组中每个数之后的比这个数大的数。一开始直接遍历,果不其然TLE了。这题要记录每个数出现的位置和次数,遍历这个数到50每一个数,找出最接近的数输出即可,没有则输出-1.

#include<bits/stdc++.h>

using namespace std;
const int M=1e9+7;
const int N=1e5+10;
const int INF=0x3f3f3f3f;
int a[N];//输入数组
int t[55][N];//记录每个数出现的位置
int k[55];//记录每个数出现的次数
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
        t[a[i]][k[a[i]]]=i;//记录这个数第k[i]次出现时的位置
        k[a[i]]++;//这个数出现的次数
    }
    for(int i=0;i<n;i++){//遍历数组中每个数
        int sum=INF;
        for(int j=a[i]+1;j<=50;j++){//遍历比a[i]大的数
            int l=0,r=k[j]-1;
            while(l<r){//二分找出最接近a[i]的数
                int mid=(l+r)/2;
                if(t[j][mid]>i)
                    r=mid;
                else
                    l=mid+1;
            }
            if(t[j][r]>i)
                sum=min(sum,t[j][r]);//取最接近a[i]的数
        }
        if(sum==INF)
            cout<<"-1"<<" ";
        else
            cout<<a[sum]<<" ";
    }
    return 0;
}

I

题记:当i,j相同时,a[i][j]是第i个数的平方。把这个数开平方即可。

#include<bits/stdc++.h>

using namespace std;
const int M=1e9+7;
const int N=1e5+10;
int a[105][105];
int ans[105];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++)
        cout<<pow(a[i][i],0.5)<<" ";
    return 0;
}

J

K

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值