传送门:http://codeforces.com/contest/908
A. New Year and Counting Cards
题意:阅读理解题(。
思路:只需要统计“a”,“e”,“i”,“o”,“u”和奇数的个数就行。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<map>
#include<cstdlib>
using namespace std;
typedef double db;
typedef long long ll;
int main ()
{
//yyy_3y
// freopen("1.in","r",stdin);
string s; cin >> s;
int cnt=0;
for(int i=0;i<s.length();i++){
if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u') cnt++;
if(s[i]<='9'&&s[i]>='0') if((s[i]-'0')%2) cnt++;
}
cout << cnt << endl;
}
B. New Year and Buggy Bot
题意:题意很好理解,S是起点,E是终点,‘#’是障碍物,‘.‘可以走。然后给你一串0-3的数字,然后四个数字表示方向,(你可以定义0是上也可以1是上等等),问有多少种方案可以从S到E(只要到了就行)。特别注意:’#‘表障碍!某龟!
思路:全排列枚举一下即可。
#include<bits/stdc++.h>
using namespace std;
typedef double db;
typedef long long ll;
char s[100][100];
int jx[]={0,0,1,-1};
int jy[]={1,-1,0,0};
int num[10];
int s_x,s_y,t_x,t_y;
string lo;
int main ()
{
//yyy_3y
freopen("1.in","r",stdin);
int n,m; scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%s",s[i]+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(s[i][j]=='S') s_x=i,s_y=j;
if(s[i][j]=='E') t_x=i,t_y=j;
}
}
cin >> lo;
int flag=0;
num[0]=0;num[1]=1;num[2]=2,num[3]=3;
do{
int ss_x=s_x,ss_y=s_y;
for(int i=0;i<lo.length();i++){
for(int j=0;j<=3;j++){
if(lo[i]-'0'==num[j]) ss_x+=jx[j],ss_y+=jy[j];
}
if(ss_x<1||ss_x>n||ss_y<1||ss_y>m) break;
if(s[ss_x][ss_y]=='#') break;
if(ss_x==t_x&&ss_y==t_y){
flag++;
// printf("%d %d %d %d\n",num[0],num[1],num[2],num[3]);
break;
}
}
}while(next_permutation(num,num+4));
printf("%d\n",flag);
return 0;
}
C. New Year and Curling
题意:n个半径为r的球依次落下,给出每个球从高处落下的横坐标,球碰到x轴 或者 碰到之前已经落下的球就会停止运动,要你求出每个球静止时的圆心位置。
思路:n为1000,我们枚举每个点的状态,求最大值即可。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<map>
#include<cstdlib>
using namespace std;
typedef double db;
typedef long long ll;
double ans[1100];
int x1[1100];
int main ()
{
//yyy_3y
freopen("1.in","r",stdin);
int n,r; scanf("%d%d",&n,&r);
scanf("%d",&x1[1]);
ans[1]=r;
for(int i=2;i<=n;i++){
scanf("%d",&x1[i]);
double res=r;
for(int j=1;j<i;j++){
if(abs(x1[i]-x1[j])<=2*r)
res=max(res,ans[j]+sqrt(4*r*r-(x1[i]-x1[j])*(x1[i]-x1[j])));
// printf("res=%.6f\n",res);
}
ans[i]=res;
}
printf("%.6f",ans[1]);
for(int i=2;i<=n;i++) printf(" %.6f",ans[i]);
printf("\n");
return 0;
}