Py3 P1125 笨小猴

Powered by:AB_IN 局外人

P1125 笨小猴

set这部分也可以用桶排找到最大最小值。还可能更快,这里菜鸡只想记一下set我不太清楚的用法。
C++

#include <bits/stdc++.h>
using namespace std;
set<int>s;
set<int>::iterator it1;
const int N=1e4+5;
int  cnt,sum,ans,prime[N],pre[N],vis[130];
bool flag[N];
void init()
{
    memset(flag,1,sizeof(flag));
    flag[1]=cnt=0;
    for(int i=2;i<=N;i++)
    {
        if(flag[i])
        {
            prime[++cnt]=i;
            pre[i]=cnt;
        }
        for(int j=1;j<=cnt&&prime[j]*i<=N;j++)
        {
            flag[prime[j]*i]=0;
            if(i%prime[j]==0)break;
        }
    }
}
int main()
{
    string str;
    init();
    cin>>str;
    for(int i=0;i<str.size();i++){
        vis[str[i]]++;
    }
    for(int i=0;i<str.size();i++){
        s.insert(vis[str[i]]);
    }
    it1=s.begin();
    int num=(*s.rbegin())-(*it1);
    if(pre[num])
        cout<<"Lucky Word"<<endl<<num;
    else
        cout<<"No Answer"<<endl<<"0";
    return 0;
}

这里的rbegin()其实就是数组的末尾位置,rend()是数据开始位置的前一个位置,他把原本的左闭右开区间变成了左开右闭的区间。(rend(),rbegin()]
如果要用到这两个函数,声明的时候要写成set<int>::reverse_iterator it;
*s.rbegin()可以直接用,直接得到数。
Py3

def su(x):
    if x<2:
        return False
    for i in range(2,x):
        if x%i==0:
            return False
    return True
s=input()
maxn=s.count(max(s,key=s.count));minn=s.count(min(s,key=s.count))
if su(maxn-minn)==True:
    print("Lucky Word");print(maxn-minn)
else:
    print("No Answer");print("0")

max(iterable, key=function, default) :求迭代器的最大值

其中iterable 是一个可迭代对象,例如list,str。

max会遍历这个迭代器,将迭代器的每一个返回值传给function,(结构体那说过),返回值经过function处理后再传给key,之后以key为标准进行大小的判断。(其实key就相当于迭代器的值经过function处理过的值)

其实我们平常写的max(range(0,8))max(range(0,8),key=lambda x: x)是一样的。
完结。

猜你喜欢

转载自blog.csdn.net/qq_45859188/article/details/106292955