codeforce 172 Div.2

来源:互联网 发布:北京朝阳有线网络电视 编辑:程序博客网 时间:2024/05/01 13:16

wa的好high 啊。。。

A - Word Capitalization:

不解释了。。。

/*************************************************************************    > File Name: a.cpp    > Author: withwind    > Mail: withwind93@gmail.com     > Created Time: 2013/3/10 23:21:19 ************************************************************************/#include <limits.h>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <iostream>using namespace std;int main(){int i,j,k;int n;char s[1100];scanf("%s",s);if(s[0]>='a' && s[0]<='z')  s[0]=s[0]-'a'+'A';printf("%s\n",s);return 0;}


B - Nearest Fraction

b直接1到n暴力求解。a 在范围t=(x*1.0/(y*1.0))*i,[t+2,t-2]内,求解下最小值。。坑爹。。。

/*************************************************************************    > File Name: b.cpp    > Author: withwind    > Mail: withwind93@gmail.com     > Created Time: 2013/3/10 23:21:27 ************************************************************************/#include <limits.h>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <iostream>using namespace std;int main(){int i,j,k;int x,y,a,b;int n;double min=1000000.0;scanf("%d %d %d",&x,&y,&n);double x1 = (x*1.0)/(y*1.0);doubletmin = x1;for(i = n;i>=1;i--){int t = (x*1.0/(y*1.0))*i+0.5;j=t+2;for( ;j>=t-2 ;j--){if(j<0)break;double tmp = fabs(x1-(j*1.0)/(i*1.0));if(tmp<=tmin){tmin = tmp;//printf("tmin  = %llf\n",tmin);a = j;b = i;}}}printf("%d/%d\n",a,b);return 0;}


D - Maximum Xor Secondary

看别人代码学到的。。。

/*************************************************************************    > File Name: d.cpp    > Author: withwind    > Mail: withwind93@gmail.com     > Created Time: 2013/3/11 13:28:36 ************************************************************************/#include <limits.h>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <iostream>using namespace std;int a[100010],stack[100010];int main(){int i,j,k;int n;int ans = 0;scanf("%d",&n);for(i = 1;i<=n;i++){scanf("%d",&a[i]);}int top;/*正向搜索,将递减的数字放入stack中,所以当a>stack时候,stack那一位数开始到a,a为最大,stack为第二大*/top = 0;stack[++top] = a[1];for(i = 2;i<= n;i++){while(top >=1 && a[i]>stack[top]){ans = max(ans,a[i]^stack[top]);top--;}stack[++top] = a[i];/*上层循环之后,a[i]必定为stack中最小值*/}/*方向搜索,将递减的数字放入stack中,所以当a>stack时候,stack那一位数开始到a,a为最大,stack为第二大*/top = 0;stack[++top] = a[n];for(i = n;i>=1;i--){while(top >=1 && a[i]>stack[top]){ans = max(ans,a[i]^stack[top]);top--;}stack[++top] = a[i];/*上层循环之后,a[i]必定为stack中最小值*/}printf("%d\n",ans);return 0;}


原创粉丝点击