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("."); } } }
来源:https://www.cnblogs.com/qscqesze/p/6159874.html