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)是一樣的。
完結。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章