Codeforces Round #666 (Div. 2) Power Sequence、Multiples of Length 思维
题目链接:Power Sequence
题意:
给你n个数vi,你可以对这个序列进行两种操作
1、可以改变其中任意个vi的位置,无成本
2、可以对vi进行加1或减1,每次操作成本为1
如果操作之后的vi(设v数组下标从1到n)满足:如果存在一个数c,使得每一个vi都满足vi==ci
你需要输出这个满足题意得vi数组构成所需的最小成本
题解:
题目要求1<=ai<1e9,那么可以说所有vi都加起来得数量级是1e9,那么也就说如果cn,那么c这个数就不可取
因为我们c可以取1,那么成本最大也是在1e9数量级
所以就暴力枚举c因子就行,这个c得范围我随便定了一个范围,具体见代码
代码:

1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #include<iostream>
5 using namespace std;
6 typedef long long ll;
7 const int maxn=1e5+10;
8 const int INF=1e9;
9 char s[maxn];
10 ll v[maxn];
11 long long pf(ll a, ll b)
12 {
13 ll res = 1;
14 while (b--)
15 res *= a;
16 return res;
17 }
18 int main()
19 {
20 ll n;
21 scanf("%lld",&n);
22 v[0]=1;
23 for(ll i=1; i<=n; ++i)
24 {
25 scanf("%lld",&v[i]);
26 }
27 sort(v+1,v+n+1);
28 ll sum;
29 sum=100000000000000;
30 if (n >= 36)
31 {
32 sum = 0;
33 for (ll i = 1; i <= n; i++)
34 sum += v[i] - 1;
35 printf("%lld\n", sum);
36 return 0;
37 }
38 for (ll k = 1; k <= 100000; k++)
39 {
40 long long temp = 0, flag = 1,tmp=1;
41 for (ll i = 1; i <= n; i++)
42 {
43 if (tmp >= n * 1000000000)
44 {
45 flag = 0;
46 break;
47 }
48 temp += abs(v[i] - tmp);
49 tmp*=k;
50 }
51 if (flag)
52 sum = min(temp, sum);
53 }
54 printf("%lld\n",sum);
55 return 0;
56 }
题目链接:Multiples of Length
题意:
给你n个数vi,每次操作你可以选取一个区间[l,r],区间长度len=r-l+1,那么你可以对这个区间内的vi加上len的倍数,这个倍数可以是负数,即-1*len
你必须要在3个操作内使得所有vi变为0,请输出这3个操作
题解:
我们设v数组下标从1到n,你可以先对区间[1,n-1]上的vi都加上(n-1)*vi,那么再使v[n]变成n*v[n]。那么最后在对区间[1,n]内的所有vi减去n*vi就行
代码:

1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #include<iostream>
5 using namespace std;
6 typedef long long ll;
7 const int maxn=1e5+10;
8 const int INF=1e9;
9 ll v[maxn];
10 int main()
11 {
12 ll n;
13 scanf("%lld",&n);
14
15 for(ll i=1;i<=n;++i)
16 {
17 scanf("%lld",&v[i]);
18 }
19 if(n==1)
20 {
21 printf("1 1\n");
22 printf("%lld\n",-1*v[1]);
23 printf("1 1\n0\n");
24 printf("1 1\n0\n");
25 return 0;
26 }
27 printf("1 %lld\n",n-1);
28 for(ll i=1;i<n;++i)
29 {
30 if(i==n-1)
31 printf("%lld\n",(n-1)*v[i]);
32 else printf("%lld ",(n-1)*v[i]);
33 }
34
35 printf("%lld %lld\n",n,n);
36 printf("%lld\n",n*v[n]-v[n]);
37
38 printf("1 %lld\n",n);
39 for(ll i=1;i<=n;++i)
40 {
41 if(i==n)
42 printf("%lld\n",-1*n*v[i]);
43 else printf("%lld ",-1*n*v[i]);
44 }
45 return 0;
46 }
Codeforces Round #666 (Div. 2) Power Sequence、Multiples of Length 思维的更多相关文章
- Codeforces Round #556 (Div. 2) - C. Prefix Sum Primes(思维)
Problem Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 1000 mSec Problem Descripti ...
- Codeforces Round #666 (Div. 2)
比赛链接:https://codeforces.com/contest/1397 A. Juggling Letters 题意 给出 $n$ 个字符串,可在字符串间任意移动字母,问最终能否使这 $n$ ...
- Codeforces Round #666 (Div. 2) B. Power Sequence (枚举)
题意:有一个长度为\(n\)的序列,你每次可以对序列重新排序,然后花费\(1\)使某个元素加减\(1\),多次操作后使得新序列满足\(a_{i}=c^i\),\(c\)是某个正整数,求最小花费. 题解 ...
- Codeforces Round #666 (Div. 2) C. Multiples of Length (构造,贪心)
题意:有一个长度为\(n\)的序列,可以操作\(3\)次,每次选取一段区间,然后区间的元素加减区间长度的倍数,\(3\)次操作后使得序列所有元素为\(0\),问具体操作情况. 题解:假如我们能选择一整 ...
- Codeforces Round #666 (Div. 2) C. Multiples of Length (贪心)
题意:给你一个由\(0,1,?\)组成的字符串,你可以将\(?\)任意改成\(0\)或\(1\),问你操作后能否使得该字符串的任意长度为\(k\)的区间中的\(0\)和$1的个数相等. 题解:我们首先 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation(递归)
C. Sequence Transformation 题目链接:https://codeforces.com/contest/1059/problem/C 题意: 现在有1~n共n个数,然后执行下面操 ...
- Codeforces Round #506 (Div. 3) D. Concatenated Multiples
D. Concatenated Multiples You are given an array aa, consisting of nn positive integers. Let's call ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation 思维构造
题意 给出一个1-n的集合 gcd 集合里面的所有数 得到的 一个 数 然后自己选择删去一个数 要使得到的数 构成的数列 的字典序最大 思路: gcd所有数 那gcd得到的数肯定要小于数 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation
题目大意:给你一个n 从1,2,3......n这个序列中 依次进行以下操作:1 .求所有数的最大公因数,放入a序列里面 2 .任意删去一个元素 一直到序列为空 根据删除元素的不同,导致序列a的字典序 ...
随机推荐
- Jenkins Android APP 持续集成体系建设二—自动部署、执行测试任务,关联打包任务
经过上一遍博客我们知道了怎么使用Jenkins自动打包,但打完包之后,我们还需要对新包进行回归测试,确定新包有没有问题,然后才能发布包,那么,话不多说,我们先来新建个自动化回归测试任务 新包自动化回归 ...
- 【Linux】Linux下如何分区及如何格式化
环境:CentOS7.1 磁盘大小是1.8T 将磁盘/dev/sda分一个分区,分区类型为xfs fdisk /dev/sda n --创建新分区 p --创建分区类型为主分区 1 --主分 ...
- 惠普电脑(HP PHILIPS系列)安装ubuntu后无法连接WIFI解决方案(手动安装8821CE驱动)
一步一步来, 先说环境: 我的电脑是HP PHILIPS系列,ubuntu版本是16.04 背景: win10安装ubuntu后发现无法连接wifi(但win10系统可以连接WIFI),在ubuntu ...
- [APUE] 文件 I/O
文件操作相关 API:open, read, write, lseek, close. 多进程共享文件的相关 API:dup, dup2, fcntl, sync, fsync, ioctl. 文件操 ...
- 三十二:WEB漏洞-文件操作之文件下载读取全解
文件下载读取 原路,检测,利用,修复 利用 数据库配置文件下载或者读取后续 接口密钥信息文件下载或者读取后续 文件名,参数值,目录符号 read.xxx?filename= down.xxx?file ...
- flask文件下载
后端的代码 # coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/upload", m ...
- TSP旅行商问题
求解的问题,burma.tsp里面的内容 1 16.47 96.10 2 16.47 94.44 3 20.09 92.54 4 22.39 93.37 5 25.23 97.24 6 22.00 9 ...
- selenium浏览器弹出框alert 操作
1.简介 在WebDriver中要处理JS生成的alert.confirm以及prompt,需要 switch_to.alert() 来选取(定位)警告弹窗,在对弹窗进行关闭.输入等信息操作. 2.操 ...
- .NET 中依赖注入组件 Autofac 的性能漫聊
Autofac 是一款超赞的 .NET IoC 容器 ,在众多性能测评中,它也是表现最优秀的一个.它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改.它的实现方式是将常 ...
- Java面向对象(一)----初次见面
面向对象 面向过程:根据业务逻辑从上到下写代码 函数式编程:对一些功能的代码封装到函数中,日后无需重复编写,直接调用函数就可以了 面向对象:将所有的功能进行封装,面对的事封装了功能的实体(对象),即面 ...