【Codeforces Round #446 (Div. 2) C】Pride
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
想一下,感觉最后的结果肯定是从某一段开始,这一段的gcd为1,然后向左和向右扩散的。
则枚举那一段在哪个地方。
我们设这一段中所有的数字都做了一次gcd.
假设在i..j这一段。
则求gcd的顺序是(i,i+1),(i+1,i+2)...(j-1,j)
这样a[j]=gcd(a[i],a[i+1]..a[j])了
即顺序求了一遍gcd.
这样,预处理一下i到j的gcd.
如果gcd[i][j]==1,则获取到一个可行方案。
求一下次数的最小值就好了
即(j-i)*2 + i-1 + n-j
当然,如果已经有1了,就没必要去凑一个1出来了。
直接枚举从1开始向左、向右就好。
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 2e3;
int a[N+10],n;
int f[N+10][N+10];
int main(){
#ifdef LOCAL_DEFINE
freopen("F:\\c++source\\rush_in.txt", "r", stdin);
#endif
scanf("%d",&n);
for (int i = 1;i <= n;i++) scanf("%d",&a[i]);
int ans = -1;
//have 1
for (int i = 1;i <= n;i++)
if (a[i]==1){
int cnt = 0;
for (int j = i-1;j >= 1;j--)
if (a[j]!=1){
cnt++;
}
for (int j = i+1;j <= n;j++)
if (a[j]!=1){
cnt++;
}
if (ans==-1 || ans > cnt) ans = cnt;
}
int temp = a[1];
for (int i = 2;i <=n;i++) {
temp = __gcd(temp,a[i]);
}
if (temp!=1){
puts("-1");
return 0;
}
for (int i = 1;i <= n;i++){
f[i][i] = a[i];
for (int j = i+1;j <= n;j++){
f[i][j] = __gcd(f[i][j-1],a[j]);
}
}
for (int i = 1;i <= n;i++){
for (int j = i;j <= n;j++)
if (f[i][j]==1){
int temp = (j-i)*2 + (i-1) + (n-j);
if (ans==-1){
ans = temp;
}else ans = min(ans,temp);
}
}
printf("%d\n",ans);
return 0;
}
【Codeforces Round #446 (Div. 2) C】Pride的更多相关文章
- 【Codeforces Round #446 (Div. 2) B】Wrath
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 倒着来,维护一个最小的点就可以了. [代码] #include <bits/stdc++.h> using namesp ...
- 【Codeforces Round #446 (Div. 2) A】Greed
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 贪心选容量大的瓶子就好 [代码] #include <bits/stdc++.h> #define int long l ...
- 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- 【Codeforces Round #423 (Div. 2) C】String Reconstruction
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...
- 【Codeforces Round #423 (Div. 2) B】Black Square
[Link]:http://codeforces.com/contest/828/problem/B [Description] 给你一个n*m的格子; 里面包含B和W两种颜色的格子; 让你在这个格子 ...
- 【Codeforces Round #423 (Div. 2) A】Restaurant Tables
[Link]:http://codeforces.com/contest/828/problem/A [Description] 有n个组按照时间顺序来餐馆; 每个组由一个人或两个人组成; 每当有一个 ...
随机推荐
- 最长上升子序列(LIS)nlogn模板
参考https://www.cnblogs.com/yuelian/p/8745807.html 注意最长上升子序列用lower_bound,最长不下降子序列用upper_bound 比如123458 ...
- OpenJDK源码研究笔记(十三):Javac编译过程中的上下文容器(Context)、单例(Singleton)和延迟创建(LazyCreation)3种模式
在阅读Javac源码的过程中,发现一个上下文对象Context. 这个对象用来确保一次编译过程中的用到的类都只有一个实例,即实现我们经常提到的"单例模式". 今天,特意对这个上下文 ...
- 1.6 INSERT语句
1.6 INSERT语句正在更新内容,请稍后
- Linux系统下到哪儿寻找硬件错误
Linux系统下到哪儿寻找硬件错误 当linux系统出现故障的时候,作为管理员首先要定位错误,现在linux有许多工具都能帮助用户寻找错误,要学会利用他们确定问题.这些工具包括dmesg. ...
- ASP.NET WebAPI RC 竟然不支持最常用的json传参
壮士断腕(WCF Web API),为的是 ASP.NET Web API 的横空出世,再加上它的开放(开源),于是对之产生了一点点痴情,并写下了HttpClient + ASP.NET Web AP ...
- noi2019模拟测试赛(四十七)
noi2019模拟测试赛(四十七) T1与运算(and) 题意: 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...
- VMware Vsphere 6.0安装部署 Vsphere ESXi安装
Vsphere ESXi安装 ESXi作为虚拟化环境的Hypervisor层,负责将服务器虚拟成资源池,提供接口供管理组件调用,将下面的iso刻录成光盘或可启动U盘,安装在服务器裸机上: 下载地址请见 ...
- syslog日志介绍
一. syslog简介 syslog是一种工业标准的协议,可用来记录设备的日志.在UNIX系统,路由器.交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件.管理者可以 ...
- Python 3 下载安装和环境搭建
Python3 下载 由于博主使用的平台是Windows10,以下方法仅限win10系统 Python 官网:https://www.python.org/ 找到跟系统相应的版本瞎子: Python ...
- 如何在手机上查看测试vue-cli构建的项目
用vue-cli构建的项目有时候有些功能需要在手机上测试,比如上传图片的时候调用手机拍照功能或者查看相册的功能,这个时候就要用到手机测试了,那么如何在手机上查看测试vue-cli构建的项目?今天就写一 ...