Codeforces Round #491 (Div. 2)


A. If at first you don't succeed...

按题意判断

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define mem(W) memset(W,0,sizeof(W))
typedef long long ll;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int n,a,b,c;
int main() {scanf("%d%d%d%d",&a,&b,&c,&n);int p = a+b-c;if(a>=c&&b>=c&&n-p>=1) printf("%d\n",n-p);else printf("-1\n");return 0;
}

B. Getting an A

排序之后,暴力修改加check...被fst。。。凉透

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define mem(W) memset(W,0,sizeof(W))
typedef long long ll;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int n;
int a[111];
bool ck() {double x=0;rep(i,1,n)x+=a[i];x/=n;return (int)(x+0.5) == 5;
}
int main() {scanf("%d",&n);rep(i,1,n)scanf("%d",&a[i]);sort(a+1,a+n+1);int ans=0;rep(i,1,n+1) {if(ck()){printf("%d\n",ans);return 0;}if(a[i]<5){a[i]=5;++ans;}}return 0;
}

C. Candies

每次减\(\frac{1}{10}\)的这个操作使得数减小的非常快,二分k暴力模拟即可

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define mem(W) memset(W,0,sizeof(W))
typedef long long ll;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
ll n;
int ck(ll k) {ll tn=n,x,res=0;while(tn) {if(tn<k) res+=tn,tn=0;else tn-=k,res+=k;if(tn>=10){x = tn/10;tn -= x;}}return (res*2LL >= n);
}
int A[10000];
int main() {scanf("%I64d",&n);ll l=1,r=n,ans,mid;while(l<=r){mid = (l+r)/2LL;if(ck(mid))r=mid-1,ans=mid;else l=mid+1;}printf("%I64d\n",ans);return 0;
}

D. Bishwock

直接搜索即可。。。一开始推了个假的结论打算小范围暴力,然后dp,WA了。。。无奈交了暴力的代码。。过了

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define mem(W) memset(W,0,sizeof(W))
typedef long long ll;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int n,ans;
char s[2][111];
void dfs(int now,int ed,int d){if(now==ed+1){ans = max(ans,d);return;}if(s[0][now-1]=='0'&&s[1][now-1]=='0'&&s[0][now]=='0'){s[0][now-1]=s[1][now-1]=s[0][now]='X';dfs(now+1,ed,d+1);s[0][now-1]=s[1][now-1]=s[0][now]='0';}else if(s[0][now-1]=='0'&&s[1][now-1]=='0'&&s[1][now]=='0'){s[0][now-1]=s[1][now-1]=s[1][now]='X';dfs(now+1,ed,d+1);s[0][now-1]=s[1][now-1]=s[1][now]='0';}else if(s[0][now-1]=='0'&&s[1][now]=='0'&&s[0][now]=='0'){s[0][now-1]=s[1][now]=s[0][now]='X';dfs(now+1,ed,d+1);s[0][now-1]=s[1][now]=s[0][now]='0';}else if(s[1][now-1]=='0'&&s[1][now]=='0'&&s[0][now]=='0'){s[1][now-1]=s[1][now]=s[0][now]='X';dfs(now+1,ed,d+1);s[1][now-1]=s[1][now]=s[0][now]='0';}else dfs(now+1,ed,d);
}
int solve(int l,int r){ans=0;dfs(l+1,r,0);return ans;
}
int dp[111];
int main() {scanf(" %s",s[0]);scanf(" %s",s[1]);n = strlen(s[0]);cout << solve(0,n-1) << endl;return 0;
}

E. Bus Number

统计0~9出现的次数,按题意暴力枚举每个数分别出现多少个,这个复杂度可以接受,对于每个情况设一共有sum个数字,A[i]为数字i出现的次数,那么\(\frac{sum!}{A[0]!A[1]!...A[9]!}\)为不管前导0情况下的排列数,现在考虑如何计算有前导0的情况,把非0的数仿照上边的方法求出排列数,现在把一个0放到开头,剩余的0插空放在这sum个数之间即可,这是经典的球盒模型,球无别,盒子有别可空。把上面两个值相减就是答案。。。。欲哭无泪的手速。。。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
#define mem(W) memset(W,0,sizeof(W))
typedef long long ll;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
const int N = 105;
using namespace std;
int n;
char s[33];
int p[N], notp[N], nxt[N], b[N];
void init(){notp[1]=1;nxt[1]=1;for(int i=2;i<=20;++i) {if(!notp[i]) p[++p[0]]=i,nxt[i]=i;for(int j=1;j<=p[0]&&i*p[j]<=20;++j) {notp[i*p[j]] = 1;nxt[i*p[j]]=p[j];if(i%p[j]==0)break;}}
}
ll q_pow(ll a,ll b) {ll ans=1;while(b) {if(b&1LL) ans=(ans*a);a=(a*a);b>>=1LL;}return ans;
}
inline void add(int x,int f) {while(x!=1){b[nxt[x]]+=f;x/=nxt[x];}
}
ll cal() {ll ans = 1;rep(i,1,p[0])ans = (ans*q_pow(p[i],b[p[i]])),b[p[i]]=0;return ans;
}
ll ans=0;
int sum=0,num[11],A[11];
string v;
set<string> ts;
void solve(){v.clear();rep(i,0,9)rep(j,1,num[i])v+=(char)('0'+i);int T = 1;for(int i=1;i<=v.size();++i) T*=i;while(T--){cout << v <<endl;if(v[0]!='0')ts.insert(v);next_permutation(v.begin(),v.end());}
}
void dfs(int t) {if(t==10){rep(i,1,sum)add(i,1);rep(i,0,9){rep(j,1,num[i]) add(j,-1);}//solve();ans += cal();if(num[0]){int m = sum-num[0]+1, n = num[0]-1;rep(i,1,m+n-1)add(i,1);rep(i,1,m-1)add(i,-1);rep(i,1,n)add(i,-1);rep(i,1,sum-num[0])add(i,1);rep(i,1,9)rep(j,1,num[i])add(j,-1);ans -= cal();}return;}if(A[t]==0)dfs(t+1);else {rep(i,1,A[t]){num[t]+=i;sum+=i;dfs(t+1);num[t]-=i;sum-=i;}}
}int main() {init();scanf(" %s",s);n=strlen(s);rep(i,0,n-1)++A[s[i]-'0'];dfs(0);printf("%I64d\n",ans);//cout << ts.size() << endl;return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9219483.html

Codeforces Round #491 (Div. 2)相关推荐

  1. Codeforces Round #491 (Div. 2) E - Bus Number + 反思

    E - Bus Number 最近感觉打CF各种车祸.....感觉要反思一下, 上次读错题,这次想当然地以为18!肯定暴了longlong 而没有去实践, 这个题我看到就感觉是枚举每个数字的个数,但是 ...

  2. Codeforces Round #491 (Div.2)

    get 被精度坑死了(B,C).遇到精度问题看能不能转化为整数,不行的话就用eps判断 A. If at first you don't succeed- 题意 有两个聚会,A个人去第一个聚会,B个人 ...

  3. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  4. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  5. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  6. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  7. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  8. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  9. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

最新文章

  1. linux下安装mysql笔记
  2. 子类如果不实例化则不会调用它自身的静态构造函数
  3. 如何避免面试中薪水要的太高或太低?
  4. 开源微服务运行时 Dapr 发布 1.0 版本
  5. SharePoint 2007 SP2 发布
  6. linux下怎么查看程序异常,linux程序莫名异常怎么查
  7. “物联网”中,少了这项技术,会损失多少,算过吗!
  8. MVC 的八个扩展点
  9. 9 ASCLL 码表
  10. java基本数据类型转类对象
  11. 超级搜索(Super search)
  12. linux学习杂碎:权限
  13. java 开发工具eli_二进制开发ELI5 –第1部分
  14. JS如何判断包括IE11在内的IE浏览器
  15. Word调整页眉与标题/正文的距离
  16. python-用IDLE运行程序
  17. unity挥动武器产生的剑痕特效
  18. 当日、昨日、当周、本周、当月、上个月获取方法
  19. Resin 配置与使用
  20. 元宇宙赛道火热已是共识!上市公司正加码布局,基础设施支撑待完善

热门文章

  1. 算法设计与分析———动态规划———最大子段和
  2. 数据结构——二叉树的层次遍历进阶
  3. Java用TCP手写聊天室 可以 私聊版加群聊版
  4. 2路选择器设计(16位)
  5. [汇编语言]实验一:查看CPU和内存,用机器指令和汇编指令编程。
  6. [剑指offer]面试题23:从上往下打印二叉树
  7. 《C++ Primer》7.1.2节练习(部分)
  8. UVA-11988 悲剧文本-静态链表
  9. 蓝桥杯2015初赛-三羊献瑞-枚举
  10. 使用单项循环链表实现字典操作(算法导论第十章10.2-5题)