产生数

预处理出一个数能变成多少种数,然后遍历原串的每一位,累乘方案数即可。

需要用到高精度。

 /*By SilverN*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
char s[];
int ans[],len;
int num[];
int n;
int mp[][];
void mul(int x){
int i;
for(i=;i<=len;i++){ans[i]=ans[i]*x;}
for(i=;i<=len;i++){
if(ans[i]<)continue;
ans[i+]+=ans[i]/;
ans[i]%=;
}
while(ans[len]){
ans[len+]+=ans[len]/;
ans[len]%=;
len++;
}
return;
}
int main(){
scanf("%s",s);
int i,j;
scanf("%d",&n);
int u,v;
for(i=;i<=n;i++){
scanf("%d%d",&u,&v);
mp[u][v]=;
}
for(i=;i<=;i++)mp[i][i]=;
for(int l=;l<=;l++)
for(i=;i<=;i++)
for(j=;j<=;j++)
mp[i][j]|=(mp[i][l]&mp[l][j]);//floyd判一个数字能转换成什么数字
for(i=;i<=;i++){
int cnt=;
for(j=;j<=;j++)if(mp[i][j])cnt++;//累计方案数
num[i]=cnt;
// printf("%d\n",num[i]);
}
int sl=strlen(s);
ans[]=;len=;
for(i=;i<sl;i++) mul(num[s[i]-'']);//累乘方案数
for(i=len-;i;--i)printf("%d",ans[i]);
return ;
}

产生数

选数

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct xs{
bool bo[];
int num[];
}x;
int sum=,k,n,coun=,ct=;
int pd(int p);
int search(int t,int pos){
for(int i=pos;i<=n;i++){
if(!x.bo[i]){
sum+=x.num[i];
x.bo[i]=;
if(t>=k){
if(pd(sum)==)coun++;
}
else search(t+,i+);
sum-=x.num[i];
x.bo[i]=;
}
}
} int pd(int p){
int i;
if(p==)return ;
for(i=;i<=p/;i++){
if(p%i==)return ;
}
return ;
}
int main(){
memset(x.bo,,sizeof(x.bo));
memset(x.num,,sizeof(x.num));
int i;
scanf("%d%d",&n,&k);
for(i=;i<=n;i++){
scanf("%d",&x.num[i]);
}
search(,);
printf("%d",coun);
return ;
}

选数

搜索各种组合方式,注意判重。

级数求和

暴力模拟

 /*By SilverN*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n;
double smm,k;
int main(){
cin>>k;
smm=;
n=;
while(n){
smm+=(double)/n;
if(smm>k)break;
n++;
}
cout<<n<<endl;
return ;
}

级数求和

过河卒

暴力动规

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int mxn=;
bool mp[mxn][mxn];
long long f[mxn][mxn];
int x1,y1,x2,y2;
int main(){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1+=;x2+=;y1+=;y2+=;
f[][]=;
mp[x2][y2]=mp[x2-][y2-]=mp[x2+][y2-]=mp[x2-][y2+]=mp[x2+][y2+]=
mp[x2-][y2+]=mp[x2-][y2-]=mp[x2+][y2-]=mp[x2+][y2+]=;
for(int i=;i<=x1;i++)
for(int j=;j<=y1;j++){
if(mp[i][j])mp[i][j]=;
else f[i][j]=f[i-][j]+f[i][j-];
}
printf("%lld\n",f[x1][y1]);
return ;
}

过河卒

最新文章

  1. Nginx 访问日志轮询切割
  2. js获取cookie
  3. php大小写转换
  4. 输入5至10之间的数字(用javaScript实现判断)
  5. 轻松掌握:JavaScript状态模式
  6. Java实现生产者和消费者
  7. opencv6.3-imgproc图像处理模块之边缘检测
  8. php使用文件缓存
  9. CSS——几个最新解决方案
  10. Linux /proc、/dev Principle
  11. PHP去除数组中重复数据的两个例子
  12. JSON对象(自定义对象)
  13. HW7.9
  14. Java异常的面试问题及答案-Part 1
  15. SSH服务及花生壳域名解析
  16. ECOS CMD更新
  17. crontab定时任务不执行的原因
  18. 深入了解UIViewController控制器与对应的View类的详解
  19. Android源代码目录组成介绍-android学习之旅(97)
  20. ArcPy 创建图层空间索引

热门文章

  1. AJPFX总结Java 程序初始化过程
  2. jdk1.8新日期时间类(DateTime、LocalDateTime)demo代码
  3. 【HEVC简介】Inter Prediction Tools
  4. 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果
  5. numpy次方计算
  6. 使用html2canvas实现网页截图,并嵌入到PDF
  7. http请求响应格式
  8. 复制webp图片到word || 微信webp图片不能复制 || 如何复制webp到word
  9. Canvas标签
  10. 前端基础之JavaScript_1