博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF852A Digits
阅读量:5264 次
发布时间:2019-06-14

本文共 1217 字,大约阅读时间需要 4 分钟。

CF852A Digits

隔壁yijian大佬写出了正解。那我就写一个随机化大法吧?

我们先考虑一种错误的贪心,每个数字分成一位,使其分割后数字和最小。虽然这样是错的,但是我们发现错误的概率很小,所以我们可以每次随机一个数字一位或者两个数字一位。后者的概率调整在百分之一左右。我们用这样的方法做出第一次分割,剩余的两次分割都每个数字一位即可。最后判断一下是否满足条件,如果不满足就重新跑一遍随机化。

#include
#include
#include
#include
#include
#include
#include
#define MAX 100using namespace std;char s[200500];int ans[200500],cnt=0,n,nums;int data[3][200500],add[3];string output;int rd() { int num=rand()%MAX; if(num==0)return 2; else return 1;}bool generate() { cnt=0,nums=0;output.clear(); for(int i=0;i
=1; i--) { printf("%d", data[1][i]); if (i != 1)printf("+"); } printf("\n"); for (int i = add[2]; i >=1; i--) { printf("%d", data[2][i]); if (i != 1)printf("+"); } return;}int main() { srand((unsigned)(time(NULL))); scanf("%d%s",&n,s); while(generate()) { long long tot=0,trans;add[0]=add[1]=add[2]=0; for(int i=1;i<=cnt;i++)tot+=ans[i];trans=tot;tot=0; while(trans){tot+=trans%10;data[1][++add[1]]=trans%10;trans/=10;}trans=tot;tot=0; while(trans){tot+=trans%10;data[2][++add[2]]=trans%10;trans/=10;} if(tot<=9){out();return 0;} else continue; }}

1669439-20190724084112953-1938019815.jpg

转载于:https://www.cnblogs.com/GavinZheng/p/11235672.html

你可能感兴趣的文章
修复IE不能执行JS的方法
查看>>
程序员究竟该如何提高效率zt
查看>>
希尔排序法(缩小增量法)
查看>>
PHP编程基础学习(一)——数据类型
查看>>
MongoDB-JAVA-Driver 3.2版本常用代码全整理(2) - 查询
查看>>
NPOI处理Word文本中上下角标
查看>>
Android笔记 Handler
查看>>
如何阅读大型前端开源项目的源码(转)
查看>>
java.util.Arrays类详解
查看>>
idea搭建tocmat
查看>>
NYOJ-626-intersection set(二分查找)
查看>>
项目管理之路(1):初步踏入项目管理
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
echarts饼图显示百分比
查看>>
JMS消息
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
php上传文件及头像预览
查看>>
大四java实习生的一些经历
查看>>
线程池的概念
查看>>
Oracle_Statspack性能诊断工具
查看>>