牛客周赛31

A小红小紫替换
https://ac.nowcoder.com/acm/contest/74362/A
这题相当于签到题只需要将kou的情况转换成yukari就行其他不变

点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string a ;
    cin >> a;
    if(a == "kou")cout << "yukari" <<endl;
    else cout << a <<endl;
    return 0;
}

B小红的因子数
https://ac.nowcoder.com/acm/contest/74362/B
B题这道题是求一个数的因子是不是为素数,所以一开始我便是想到先写一个素数判断
开个根号也是为了防止超时,但是我寻找因子的方法太笨重所以老是超时

点击查看代码
long long cmt(int x)
{
    int m = 0;
    for(long long i = 2; i <= x / i; i++)
    {
        if(x % i == 0)
        {
        m = 1;
        break;
        }
    }
    if(m == 0)n++;
    return n;
}
错误代码 能过样例但是两个for超时
点击查看代码
int main()
{
    long long a;
    cin >> a;
    if(a == 1){
    cout << 0 <<endl;
    return 0;
}
     for(long long i = 1; i < a / i; i++)
     {
        for(long long j = 1; j <= a; j++)
        {
            if(i * j == a)
            {
            if(i != j)
             {
             cmt(i);
             cmt(j);
             }
             else if(i == j)cmt(i);
            }
            else continue;
        }
     }
     cout <<n -1<<endl;
    return 0;
}
正确代码 这个首先一个个除过去去寻找他的因子像 4 8 这些都在除以2中不见了所以不用担心能作为被除数的只会剩素数这样子
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
	long long x , cnt =0;
	cin >> x;
	for(long long i = 2; i < x / i; i++)
	{
		if(x % i == 0)
		{
			cnt ++;
			while(x % i ==0)x /= i;
		}
	}
	if(x > 1)cnt ++;
	cout << cnt <<endl;
	return 0;
}

c 小红的字符串中值
https://ac.nowcoder.com/acm/contest/74362/C
这题我的想法就是我给他我从前往后找当a[0]时我找到他是三个一起五个一起的样子然后再以a[1]为头开始找
但是这样子会超时后面的样例跑不过
错误样例

点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a, n = 0;
    cin >> a;
    char b;
    cin >> b;
    string c;
    cin >> c;
    for(int i = 0; i < a; i++)
    {
        if(c[i] == b)n++;
    }
    for(int i = 0; i < a; i++)
    {
        int m = 2 + i;
        while(m < a)
        {
                if(c[(i + m)/2] == b )n++;
                if(m + 2 >= a)break;
            m += 2;
        }
    }
    cout << n << endl; 
    return 0;
}
正确代码 加入这个s[i]是我要的B我们就去寻找他能往左移动几个在又移动几个因为左右而移动一个他还是奇数串 但寻找左右哪里最小因为有一边没了就结束了
点击查看代码
#include<bits/stdc++.h>
using ll = long long;
int main()
{
    int n;
    ll cnt = 0;
    char x;
     string s;
    cin >> n >> x >> s;
    for (int i = 0; i < n; i++)
    {
        if (x == s[i])
        {
            cnt += min(n - i - 1, i) + 1;//min(n - i, i + 1);
        }
    }
    cout << cnt << '\n';
    return 0;
}
posted @ 2024-02-05 11:17  糊涂不再糊涂  阅读(13)  评论(0编辑  收藏  举报