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