//15 ms 0 KB#include#include char s[1007];int z[30];int main(){ gets(s); int len=strlen(s),count=0; memset(z,0,sizeof(z)); for(int i=0;i ='a'&&s[i]<='z') z[s[i]-'a'+1]++; } for(int i=1;i<=26;i++) if(z[i])count++; printf("%d\n",count);}
//15 ms 0 KB#include#include char s[1007];int main(){ int n; scanf("%s",s); scanf("%d",&n); int len=strlen(s),maxlen=0; if(n>=len){printf("%d\n",(n+len)/2*2);return 0;}//假设加入的长度大于等于原串长度 for(int i=1;i =0;i--)//枚举加入之后的最长长度 { int flag=0; for(int j=len-1,num=1;num<=(i-n);j--,num++) if(s[j]!=s[len-i-num]){flag=1;break;} if(!flag) { if(i>maxlen)printf("%d\n",i*2); else printf("%d\n",maxlen*2); break; } }}
题意是说给你n个数,每一个数代表为1的概率是多少,让你从中选择一个或者多个数使其概率为1的最大。
将n个数从大到小排序,假设选择一个要使概率最大,则肯定选择第一个数。
假设选择两个使其概率最大,则肯定选择前两个数,选择三个。则选择前三个数,以此推类。
仅仅要求出前一个到前n个全部情况。然后取最大即是所求。
//31 ms 0 KB#include#include using namespace std;double s[107];int cmp(double a,double b){return a>b;}int main(){ int n; double maxx=0; scanf("%d",&n); for(int i=0;i