博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AtCoder Regular Contest 060
阅读量:6475 次
发布时间:2019-06-23

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

C - 高橋君とカード / Tak and Cards

dp。记dp[i][j]为选了i张牌,和为j的方案数。

#include
#include
using namespace std;long long dp[55][2505], ans;int n, a, m;int main() { scanf("%d%d", &n, &a); dp[0][0] = 1; m = a * n; for (int t, i = 1; i <= n; ++i) { scanf("%d", &t); for (int j = i; j; --j) for (int k = m; k >= t; --k) dp[j][k] += dp[j-1][k-t]; } for (int i = 1; i <= n; ++i) ans += dp[i][i*a]; printf("%lld\n", ans); return 0;}

D - 桁和 / Digit Sum

这题很妙啊!

一句话题意:一个数N在b进制下表示为。记。现在告诉你,请你求出满足条件的最小的,如果这样的不存在,请输出-1。

分为两种情况讨论。

时:

直接枚举

时:

显然。又因为。所以

是已知的,只需要枚举的因数即可。

#include
#include
#include
using namespace std;typedef long long ll;ll s, n, m;ll f(ll b, ll n) { return n < b ? n : f(b, n / b) + n % b;}int main() { cin >> n >> s; m = sqrt(n) + 1; if (s > n) return puts("-1"), 0; if (s == n) return printf("%lld\n", s + 1), 0; for (ll i = 2; i <= m; ++i) if (f(i, n) == s) return printf("%lld\n", i), 0; ll b, q, res = 1e11; n -= s; for (ll p = 1; p * p <= n; ++p) { if (n % p == 0 ) { b = n / p + 1; q = s - p; if (q >= 0 && b >= 2 && q < b && p < b) res = min(res, b); } } printf("%lld\n", res == 1e11 ? -1 : res); return 0;}

 

转载于:https://www.cnblogs.com/p0ny/p/8072867.html

你可能感兴趣的文章
Git 界面GUI和命令行Command两种操作方式
查看>>
某外企mono for android试题
查看>>
Linux 特殊权限详解
查看>>
关于Linux的历史
查看>>
Linux字符设备驱动之cdev_init()【十全十美】
查看>>
程序员健康之路
查看>>
搞定BAT------算法系列(1)
查看>>
基于 CentOS 搭建 FTP 文件服务
查看>>
Linux使用pam_ldap实现windows ad认证
查看>>
基于Asterisk开发CTI
查看>>
华为设备端口数据清除
查看>>
使用IP访问SharePoint时内容查询部件访问出错
查看>>
Confluence 6 允许其他用户编辑站点欢迎消息
查看>>
jfinal上传文件
查看>>
java 统计某个短的字符串出现在大的字符串中的次数
查看>>
各种情况下获取web工程的路径
查看>>
分享学习Python的五大必备技能
查看>>
docker 镜像制作及dockerfile
查看>>
Python学习:生成器(generator)和迭代器(iterator)
查看>>
五个非常重要的移动Web内容适应设计理念
查看>>