9.15蚂蚁笔试求大佬解答

好难哦,第二题我不知道我的思路哪里不对呢,只过了25%,求解

第一题:取素因子
小红和小紫拿到一个正整数x,每次选择一个x的因子k(k>1),且k必须是素数,把x除以k。小红先手,谁先不能操作谁输,假设两人足够聪明,请问谁能赢?

输入:
第一行正整数t,代表游戏轮数。
接下来t行每行一个x。
1<=t<=10, 1<=x<=10**9。

输出:
对于每轮,小红赢输出“kou”,小紫赢输出“yukari”

样例:
输入:
2
5
12
输出
kou
kou

第二题:连续上升子数组
一个数组长度为n,对于每个k(1<=k<=n),有多少个长度为k的连续上升子数组?

输入:
第一行n表示数组长度
第二行n个正整数ai
1 <=n, ai<= 2 * 10**5

输出:
n个正整数,代表长度为i的连续上升子数组数量

示例:
输入:
5
2 3 4 4 2

输出:
5 2 1 0 0
其中长度为1的有:[2], [3], [4], [4], [2]。
长度为2的有:[2, 3], [3, 4]。
长度为3的有:[2, 3, 4]。

我的思路就是统计每个最大上升子数组的长度放到一个列表里,比如长度为length,那么对于长度为k的连续上升子数组就应该是k += 1 + length - k,难道不是这么算吗?下面是我的代码,只过了25
n = int(input())
nums = list(map(int, input().split()))

temp = []
r = 1
length = 1
while r < n: #算所有的最大连续上升子数组的长度放到temp,只考虑大于1的
    if nums[r] - 1 == nums[r - 1]:
        length += 1
        r += 1
    else:
        if length > 1:
            temp.append(length)
        length = 1
        r += 1

if length > 1:
    temp.append(length)

res = [0] * n
res[0] = n

for i in temp:
    length = i
    for j in range(1, n):
        if length < j + 1: #下标+1是长度
            break
        res[j] += (1 + (length - j - 1)) #核心计算公式

for j in range(n):
    res[j] = str(res[j])

print(' '.join(res))


第三题: 好子序列
一个好字符串指每个字母出现的次数均为偶数。
问一个字符串中有多少个子序列是好串?
子序列指按顺序取得字母组成的字符串,不一定连续。如:“arcaea”的子序列可以是“aaa”,“ace”等

输入:
小写字母组成的字符串

输出:
好子序列数量,对10**9+7取模后输出

示例:
输入:
ababa

输出:
7


#蚂蚁##笔试##蚂蚁2023秋招笔试凉了啊#
全部评论
int main(){     ios::sync_with_stdio(false);     cin.tie(NULL);     int n;     cin>>n;     vector<int> nums(n, 0);     unordered_map<int, int> mp;     for(int i  = 0; i < n; i++)cin>>nums[i];     int len = 1;     for(int i = 0; i < n-1; i++){         if(nums[i] < nums[i+1]){              len++;              if(i+1 == n-1)mp[len]++;         }         else{              if(len != 1)mp[len]++;              len = 1;         }     }     vector<int>  ans(n,0);     ans[0] = n;     for(int j = n-1; j >=1; j--){         for(int k = 0; k < mp[j]; k++){             for(int i = 2; i <= j; i++){                 ans[i-1] += j-i+1;             }         }     }     for(int i = 0; i < n; i++)cout<<ans<<endl; }
点赞 回复 分享
发布于 2022-09-15 21:21 广东
你好,请问是90分钟3道编程题吗,有没有选择题
点赞 回复 分享
发布于 2022-09-27 06:40 广东

相关推荐

07-15 18:09
门头沟学院 Java
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
2
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务