Codeforces Beta Round #80 (Div. 2 Only)【ABCD】

Codeforces Beta Round #80 (Div. 2 Only)

A Blackjack1

题意

一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10

现在你已经有一个queen了,问你有多少种方案,能够得到n点

题解

其实只用考虑三种情况,都考虑一下就好了,实在不行就暴力枚举……

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    scanf("%d",&n);
    if(n<=10||n>21)cout<<"0"<<endl;
    else if(n==20)cout<<"15"<<endl;
    else cout<<"4"<<endl;
}

B. Testing Pants for Sadness

题意

一共有n道题,每道题有a[i]个选项,每次答错这道题,就得重新答起。

现在问你最差的情况下,需要答多少次?

题解

答第i题失败,就会重新再答(i-1)次

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 105;
int n;
int a[maxn];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    long long ans = 0;
    for(int i=1;i<=n;i++)
        ans+=1ll*(i-1)*(a[i]-1)+a[i];
    cout<<ans<<endl;
}

C - Cthulhu

题意

给你一个图,问你这个图是否能够由几颗树组成,且树的根组成了简单环

题解

dfs,然后判断点的个数是否和边的个数相同,且是否是连通的就好了。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 106;
int vis[maxn],n,m;
int cnt = 0;
vector<int>E[maxn];
void dfs(int x){
    vis[x]=1;
    cnt++;
    for(int i=0;i<E[x].size();i++){
        int v = E[x][i];
        if(!vis[v]){
            dfs(v);

        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int a,b;
        scanf("%d%d",&a,&b);
        E[a].push_back(b);
        E[b].push_back(a);
    }
    dfs(1);
    if(n==m&&cnt==n)cout<<"FHTAGN!"<<endl;
    else cout<<"NO"<<endl;
}

D - Russian Roulette

题意

俄罗斯转盘,长度为n的环,有k个子弹,然后挨着对着脑袋打。

你是第一个人,你希望你死的概率最小,问你怎么去设置这个子弹的位置。

第二个人会一开始随机砖圈,使得每一个位置开始都是可能的。

如果死的概率一样的话,让你找到字典序最小的。

题解

其实打个表看一看,就知道偶数就应该先把偶数位置给安上子弹,然后再把奇数位置倒着放。

但是如果总长度为奇数的话,先把最后一个位置放子弹,其他位置和偶数情况一样

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long n;
    long long k;
    int q;
    scanf("%lld%lld%d",&n,&k,&q);
    if(n%2==1){
        n--,k--;
    }
    for(int i=0;i<q;i++){
        long long x;
        scanf("%lld",&x);
        if(x%2==0){
            long long x2 = x/2;
            long long num = n/2;
            if(num - x2<k)
                printf("X");
            else
                printf(".");
        }else{
            if(n%2==0&&x==n+1){
                if(k>=0)
                    printf("X");

                else{
                    printf(".");
                }
                continue;
            }
            long long num = n/2;
            long long kk = k-num;
            long long num2 = n-n/2;
            long long num3 = (x+1)/2;
            long long num4 = num2 - num3;
            if(num4<kk)printf("X");
            else printf(".");
        }
    }
}
posted @ 2016-12-11 16:34  qscqesze  阅读(274)  评论(0编辑  收藏  举报