CF #253 div2
2014-06-20 12:07:33
A,hash水过。B的话看到这么小的数据量,必然是暴搜,为了节约时间连剪枝都去了。C,数学公式推导,赛后才A,郁闷(QAQ)。(这场round比较诡异的是,到最后才发现是用小号登的,第一次比赛rank270+让小号rating一下+了159,- -!)
A:
1 #include <stdio.h> 2 #include <iostream> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 int main(){ 8 int hash[130]; 9 char s[1005]; 10 gets(s); 11 memset(hash,0,sizeof(hash)); 12 int len = strlen(s); 13 for(int i = 0 ; i < len; ++i){ 14 if(s[i] >= 'a' && s[i] <= 'z'){ 15 hash[(int)(s[i] - 'a')] = 1; 16 } 17 } 18 int sum = 0; 19 for(int i = 0; i < 130; ++i){ 20 if(hash[i] == 1) 21 ++sum; 22 } 23 printf("%d\n",sum); 24 return 0; 25 }
B:
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 int main(){ 7 char s[1005]; 8 int k,len,maxn = 0,p; 9 scanf("%s",s); 10 len = strlen(s); 11 scanf("%d",&k); 12 for(int i = len; i <= len + k - 1; ++i){ 13 s[i] = 'A'; 14 } 15 len += k; 16 for(int i = 0; i < len; ++i){ 17 for(int j = len - 1; j >= i + 1; --j){ 18 if((j - i + 1) % 2) continue; 19 int n = (j - i + 1) / 2; 20 for(p = i; p < i + n; ++p){ 21 if(s[p + n] != 'A' && s[p] != s[p + n]) 22 break; 23 } 24 if(p >= i + n){ 25 maxn = max(maxn,j - i + 1); 26 } 27 } 28 } 29 printf("%d\n",maxn); 30 return 0; 31 }
C:
1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 using namespace std; 5 const double eps = 1e-10; 6 int main(){ 7 int n; 8 double p1,p0,p[105]; 9 scanf("%d",&n); 10 for(int i = 0; i < n; ++i){ 11 scanf("%lf",&p[i]); 12 } 13 sort(p,p + n); 14 if(p[n - 1] - 0.5 > eps){ 15 printf("%.12lf\n",p[n - 1]); 16 } 17 else{ 18 p1 = p[n - 1]; 19 p0 = 1.0 - p[n - 1]; 20 for(int i = n - 2; i >= 0; --i){ 21 double tem = (1.0 - p[i]) * p1 + p0 * p[i]; 22 if(tem < p1) 23 break; 24 p1 = tem; 25 p0 *= (1.0 - p[i]); 26 } 27 printf("%.12lf\n",p1); 28 } 29 return 0; 30 }