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)
是一样的。
完结。