codeforces Good Bye 2017

传送门: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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值