AtCoder Regular Contest 060
C - 高橋君とカード / Tak and Cards
思路:dp,先说说我想的,我写的dp数组是dp[i][j][k],表示从前i个数字中,选择j个数字,平均值为k,则dp[i][j][k] = dp[i-1][j][k]+dp[i-1][j-1][(j*k-nums[i])/(j-1)],即第i个选或者不选。不过错了。。。。标程给出的题解思路差不多,dp[i][j][k]表示前i个数字中选取j个数字,和为k。dp[i][j][k] = dp[i-1][j][k]+dp[i-1][j-1][k-nums[i]]。时间复杂度为O(n^4)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 55;
long long dp[MAXN][MAXN][MAXN*MAXN];
int nums[MAXN];
int n,a;
int main()
{
scanf("%d %d",&n,&a);
for(int i = 1; i <= n; ++i)
scanf("%d",&nums[i]);
dp[0][0][0] = 1;
for(int i = 1; i <= n; ++i)
{
for(int j = 0; j <= i; ++j)
{
for(int k = 0; k <= n*50; ++k)
{
if(k >= nums[i] && j > 0) dp[i][j][k] += (dp[i-1][j][k]+dp[i-1][j-1][k-nums[i]]);
else dp[i][j][k] += dp[i-1][j][k];
}
}
}
long long res = 0;
for(int i = 1; i <= n; ++i)
res += dp[n][i][i*a];
printf("%lld\n",res);
return 0;
}
#### D - 桁和 / Digit Sum
思路:感觉这题思路就很新了,主要是因为没见过这种题。看数据范围是1e11,sqrt(n)的时间复杂度还是很好的。标程是把b分了两种情况来求解,一种是bsqrt(n)。当bsqrt(n)的时候,n=pb+q,因为这时b^2>n。考虑n的b进制表示为x2x1x0。则n=x0 + x1 * b + x2 * b^2,因为b^2>n,所以x2=0,所以这时候n = pb+q,则s=p+q。联立两式,得到n-s=p * (b-1)(标程中这里p和b写混了),然后枚举n-s的因子即可。
```c++
#include
using namespace std;
typedef long long LL;
const LL INF = 1e13;
LL n,s,st,sum;
void dfs(LL num, LL base)
{
if(num == 0) return;
dfs(num/base,base);
sum += num%base;
}
int main()
{
cin >> n >> s;
if(s > n)
{
cout << -1 << endl;
return 0;
}
if(s == n)
{
cout << s+1 << endl;
return 0;
}
st = sqrt(n) + 1;
for(LL i = 2; i <= st; ++i)
{
sum = 0;
dfs(n,i);
if(sum == s)
{
cout << i << endl;
return 0;
}
}
LL b,q,res = INF;
n = n-s;
for(LL i = 1; i*i <= n; ++i)
{
if(n%i == 0)
{
b = n/i+1;
q = s-i;
if(q >= 0 && b >= 2 && q < b && i < b)
res = min(res,b);
}
}
cout << (res==INF?-1:res) << endl;
return 0;
}
<hr/>
#### E - 高橋君とホテル / Tak and Hotels
思路:首先呢,是想预处理每个点向右和向左最远能扩展的距离,想到这里,发现不会预处理,遂放弃。然后想以每个点为终点,计算出最左边起点到这个点的最短时间和最右边点到这个最短天数,发现这种情况下,不能保证a-b这一段中,a是作为起始点的,放弃。看题解。英文题解没看懂,把日文题解翻译成中文才看懂了。主要思路就是利用倍增的思想,处理出每个点向右或者向左在x天内最远能到达的距离。r[k][i]表示节点i在2^k天内最远能到达的点,r[k+1][i]=r[k][r[k][i]]。然后算天数就好了。
```c++
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5+10;
int dp[30][MAXN],x[MAXN],l,n;
int q;
int main()
{
int i,j;
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> x[i];
cin >> l;
for(int i = 1; i < n; ++i)
dp[0][i] = upper_bound(x+1,x+n+1,x[i]+l) - x - 1;
for(i = 1; i < 30; ++i)
{
for(j = 1; j <= n; ++j)
dp[i][j] = dp[i-1][dp[i-1][j]];
}
cin >> q;
int a,b,res;
while(q--)
{
res = 0;
cin >> a >> b;
if(a > b) swap(a,b);
for(i = 29; i >= 0; --i)
{
if(dp[i][a] == 0) continue;
if(dp[i][a] < b)
{
a = dp[i][a];
res += (1<<i);
}
}
cout << res+1 << endl;
}
return 0;
}
#### F - 最良表現 / Best Representation
待补
AtCoder Regular Contest 060的更多相关文章
- [Atcoder Regular Contest 060] Tutorial
Link: ARC060 传送门 C: 由于难以维护和更新平均数的值: $Average->Sum/Num$ 这样我们只要用$dp[i][j][sum]$维护前$i$个数中取$j$个,且和为$s ...
- Atcoder Regular Contest 060 F题第一问答案证明
一切的开始 令 \(x\) 为字符串,\(p\) 为正整数.如果对于满足 \(0\le i<|x|−p\) 的任何整数 \(i\) 满足 \(x[i]=x[i+p]\),则 \(p\) 称为 \ ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
随机推荐
- [待验证]使用hibernate注解忘记引入mapping导致的问题
这个问题好像是注解主键的时候,主键没有设置为int型,我设置了个string(想直接用uuid)导致的 后来学习了一下,这个主键的注解,生成策略有很多种,换成别的,就可以使用string类型 编译报错 ...
- sqlyog备份数据和导入备份数据
使用sqlyog备份数据 Database -> Backup/Export -> Backup Database As SQL Dump 根据自己实际情况,看需要 导出表结构或者仅仅只 ...
- Windows 调用OpenProcess失败
OpenProcess 打开|获得进程句柄 函数原型: HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwPro ...
- Vue--由自动获取焦点引出的DOM、mounted、自定义指令
一.自动获取焦点的DOM实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- web前端学习(四)JavaScript学习笔记部分(5)-- 事件流详解
1.JS事件详解-事件流 1.1.事件流 1.事件流: 描述的是在页面中接受事件的顺序 2.事件冒泡: 由最具体的元素接收,然后逐级上传播至最不具体的节点(文档) 3.事件捕获: 最不具体的节点先接收 ...
- web前端学习(三)css学习笔记部分(1)-- css入门基础知识+基本样式
1.介绍及语法 1.1CSS概述: CSS指层叠样式表 CSS样式表极大地提高了工作效率 如果值大于一个单词,需要加上引号(意思是值只有一个的时候可以不加引号) 1.2CSS高级语法 1.选择器分组 ...
- 外贸电子商务网站之Prestashop 设置网站基本信息
顶部banner图,首页各尺寸banner图.社交分享.物流支持.支付方式提醒等等设置 示例版本:1.6.1.11
- php中实现多线程的的两个方法具体是怎样?
假设你要建立一个服务来检查正在运行的n台服务器,以确定他们还在正常运转.你可能会写下面这样的代码:代码如下: <?php$hosts = array("host1.sample.com ...
- 【JZOJ4928】【NOIP2017提高组模拟12.18】A
题目描述 数据范围 对于100%的数据,n<=100000,1<=A[i]<=5000 =w= Ans=∏1ai 代码 #include<iostream> #inclu ...
- day3-转自金角大王
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...