CF798 C. Mike and gcd problem

本文解析了CodeForces平台上编号为798C的问题——Mike and GCD Problem。介绍了如何通过变换操作使得数列的GCD大于1,并实现最少变换次数的方法。核心思路在于利用数论和贪心算法来解决美丽数列问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 /*
 2  CF798 C. Mike and gcd problem
 3  http://codeforces.com/contest/798/problem/C
 4  数论 贪心
 5  题意:如果一个数列的gcd值大于1,则称之为美丽数列
 6     给出数列a,可以将a_i 和 a_(i+1)换为其差和其和
 7     如果可以变为美丽数列,输出YES并输出最少的变换次数
 8     否则输出NO
 9  思路:
10     如果变换a b
11     a b -> a-b a+b -> -2b 2a
12     因此变换两个可以把a b乘以2
13     而若a b都是奇数,只需变换一次
14     所以每次先找出相邻是奇数的情况ans++
15     然后找相邻是奇偶的情况ans+=2
16  然而
17     比赛的时候居然把ans=gcd(ans,num[i]) 写成了ans=gcd(ans,i)
18     这居然还过了40组数据,也是醉了,雪崩!
19  */
20 
21 #include <cstdio>
22 #include <algorithm>
23 #include <cstring>
24 #include <cmath>
25 #include <vector>
26 #include <queue>
27 #include <iostream>
28 #include <map>
29 #include <set>
30 //#define test
31 using namespace std;
32 const int Nmax=1e6+7;
33 int n;
34 long long num[Nmax];
35 long long gcd(long long a,long long b)
36 {
37     if(b==0)
38         return abs(a);
39     return gcd(b,a%b);
40 }
41 int main()
42 {
43     #ifdef test
44     #endif
45     scanf("%d",&n);
46     for(int i=1;i<=n;i++)
47         scanf("%I64d",&num[i]);
48     long long ans=0LL;//初始化一定要看仔细
49     for(int i=1;i<=n;i++)
50     {
51         ans=gcd(ans,num[i]);//num[i]一定不要写成i!!!!!
52     }
53     if(ans>1)
54     {
55         printf("YES\n0\n");
56         return 0;
57     }
58     ans=0LL;
59     for(int i=1;i<n;i++)
60     {
61         if((num[i]&1) && (num[i+1]&1))
62         {
63             ans++;
64             num[i]=2;
65             num[i+1]=2;
66         }
67     }
68     for(int i=1;i<=n;i++)
69     {
70         if(num[i]&1)
71         {
72             ans+=2;
73         }
74     }
75     printf("YES\n%I64d\n",ans);
76     return 0;
77 }

 

转载于:https://www.cnblogs.com/BBBob/p/6746721.html

1、安装PADS9.5 首先将PADS9.5.zip解压,解压后会出现一个PADS9.5_mib.exe的可执行文件,双击运行“PADS9.5_mib.exe”(Windows 7系统请右键点击选择“以管理员身份运行”) 提示需要硬件狗,点击“Next” 提示没有检测到授权文件,点击“Skip” 点击“Agree”,同意协议 点击“Modify”,进入配置安装环境界面 点击“Produc t Selection”,选择你需要安装的工具,一般选择PADS Layout、PADS Router、Design Entry(PADS Logic躲在这里)、Libraries等(因为是单机运行,Server Service就不用安装了) 点击“Target Path”,设置PADS9.5的安装位置 点击“PADS Projects Path”,设置PADS9.5的项目文件位置 配置完成,点击“Done” 点击“Install”开始安装 安装完毕时会提示注册, 选择“at later time”,最后点击“Done”完成安装。 2、开始和谐之旅 打开命令提示符口(大家可以将Mentorkg的文件夹下文件复制到PADS9.5的安装目录下,直接运行MentorKG.exe试验一下) mentorkg -patch X:\***\MentorGraphics\9.5PADS(X:\***为pads9.5的安装路径) 等待……会产生LICENSE.TXT,请一定记得保存!!!将文件另存为LICENSE.TXT(网上也有人另存为LICENSE.DAT,好像也没有啥问题),文件最好放在PADS9.5的安装目录下。 3、添加环境变量->系统变量,变量名:MGLS_LICENSE_FILE,变量值:LICENSE.TXT的位置,如: MGLS_LICENSE_FILE = C:\MentorGraphics\LICENSE.TXT。 至此操作完毕。 补充:PADS9.5不需要替换MGLS.DLL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值