「2017 山东一轮集训 Day3」第一题~「2017 山东一轮集训 Day3」第三题

1989: #6065. 「2017 山东一轮集训 Day3」第一题

题目描述

给定 n nn 根直的木棍,要从中选出 6 66 根木棍,满足:能用这 6 66 根木棍拼出一个正方形。注意木棍不能弯折。问方案数。

正方形:四条边都相等、四个角都是直角的四边形。

输入

第一行一个整数 n nn。
第二行包含 n nn 个整数 ai a_iai,代表每根木棍的长度。

输出

一行一个整数,代表方案数。

样例输入 

8
4 5 1 5 1 9 4 5

样例输出 

3

提示

对于 20% 20\%20% 的数据,n≤30 n \leq 30n≤30;
对于 40% 40\%40% 的数据,n≤200 n \leq 200n≤200;
对于 60% 60\%60% 的数据,n≤1000 n \leq 1000n≤1000;
对于 100% 100\%100% 的数据,n≤5000,1≤ai≤107 n \leq 5000, 1 \leq a_i \leq 10 ^ 7n≤5000,1≤ai≤107。

#include<cstdio>
#include<algorithm>
#define int long long
#define RI register int
#define CI const int&
using namespace std;
const int N=5005,S=1e7;
int n,a[N],sum[S+5],t[S+5],ans;
inline int C2(CI x)
{return x*(x-1)/2LL;
}
inline int C3(CI x)
{return x*(x-1)*(x-2)/6LL;
}
inline int C4(CI x)
{return x*(x-1)*(x-2)*(x-3)/24LL;
}
signed main()
{RI i,j; for (scanf("%lld",&n),i=1;i<=n;++i) scanf("%lld",&a[i]),++t[a[i]];//1 1 1 3for (sort(a+1,a+n+1),i=1;i<=n;++i) {for (j=i+1;j<=n;++j) if (t[a[j]]>=3) { ans+=sum[a[j]-a[i]]*C3(t[a[j]]); while (j<=n&&a[j]==a[j+1]) ++j; }for (j=1;j<i;++j) if (a[i]+a[j]<=S) ++sum[a[i]+a[j]];}//1 1 2 2for (n=unique(a+1,a+n+1)-a-1,i=1;i<=n;++i) if (t[a[i]]>=2){int ret=0,cur=0; for (RI l=1,r=i-1;l<=r;++l){while (l<=r&&a[l]+a[r]>a[i]) --r; if (l>r||a[l]+a[r]!=a[i]) continue;if (l==r) { if (t[a[l]]>=4) ret+=C4(t[a[l]]); if (t[a[l]]>=2) ret+=C2(t[a[l]])*cur; } //important!else { if (t[a[l]]>=2&&t[a[r]]>=2) ret+=C2(t[a[l]])*C2(t[a[r]]); ret+=t[a[l]]*t[a[r]]*cur; cur+=t[a[l]]*t[a[r]]; }}ans+=ret*C2(t[a[i]]);}return printf("%lld",ans),0;
}

1990: #6066. 「2017 山东一轮集训 Day3」第二题

题目描述

对于一棵有根树,定义一个点 u uu 的 k − 子树为 u uu 的子树中距离 u uu 不超过 k kk 的部分。注意,假如 u uu 的子树中不存在距离 u uu 为 k kk 的点,则 u uu 的 k − 子树是不存在的。

定义两棵子树是相同的,当且仅当不考虑点的标号时,他们的形态是相同的(儿子的顺序也需要考虑)。给定一棵 n nn 个点,点的标号在 [1,n] [1, n][1,n],以 1 11 为根的有根树。问最大的 k kk,使得存在两个点 u≠v u \neq vu≠v,满足 u uu 的 k − 子树与 v vv 的 k − 子树相同。

输入

第一行输入一个正整数 n nn。
接下来读入 n nn 个部分,第 i ii 个部分描述点 i ii 的儿子,且以顺序给出。
每个部分首先读入一个整数 x xx,代表儿子个数。接下来 x xx 个整数,代表从左到右儿子的标号。

输出

输出一个整数 k kk,代表最大的合法的 k kk。

样例输入 

8
1
2
2
3 4
0
1
5
2
6 7
0
1
8
0

样例输出 

3

提示

对于 20% 20\%20% 的数据,n≤100 n \leq 100n≤100;
对于 40% 40\%40% 的数据,n≤2000 n \leq 2000n≤2000;
对于 60% 60\%60% 的数据,n≤30000 n \leq 30000n≤30000;
对于 100% 100\%100% 的数据,n≤100000 n \leq 100000n≤100000,保证给出的树是合法的。

# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;const int maxn(2e5 + 5);
const ull base(19260817);unordered_map <ull, int> hash_table;
int first[maxn], cnt, n, idx, dfn[maxn], ed[maxn], mxd[maxn], st[maxn], top;
ull val[maxn], pw[maxn], hsh[maxn];
vector <int> son[maxn], kson[maxn];inline void Dfs1(int u) {dfn[u] = ++idx, val[idx] = 233;for (auto v : son[u]) Dfs1(v), mxd[u] = max(mxd[u], mxd[v]);ed[u] = ++idx, ++mxd[u], val[idx] = 131;
}inline void Dfs2(int u, int k) {st[++top] = u;if (top - 1 > k) kson[st[top - k - 1]].push_back(u);for (auto v : son[u]) Dfs2(v, k);--top;
}inline ull Hash(int l, int r) {return hsh[r] - hsh[l - 1] * pw[r - l + 1];
}inline int Calc(int k) {register int i, l, r;register ull v;hash_table.clear();for (i = 1; i <= n; ++i) kson[i].clear();Dfs2(1, k);for (i = 1; i <= n; ++i)if (mxd[i] > k) {l = dfn[i], v = 0;for (auto to : kson[i]) {r = dfn[to] - 1;v = v * pw[r - l + 1] + Hash(l, r);l = ed[to] + 1;}r = ed[i], v = v * pw[r - l + 1] + Hash(l, r);if (hash_table.count(v)) return 1;hash_table[v] = 1;}return 0;
}int main() {register int i, v, x, l, r, mid, ans;scanf("%d", &n);for (i = 1; i <= n; ++i)for (scanf("%d", &x); x; --x) scanf("%d", &v), son[i].push_back(v);Dfs1(1), pw[0] = 1;for (i = 1; i <= idx; ++i) pw[i] = pw[i - 1] * base;for (i = 1; i <= idx; ++i) hsh[i] = hsh[i - 1] * base + val[i];l = 2, r = n, ans = 1;while (l <= r) Calc(mid = (l + r) >> 1) ? ans = mid, l = mid + 1 : r = mid - 1;printf("%d\n", ans);return 0;
}

 

1991: #6067. 「2017 山东一轮集训 Day3」第三题

题目描述

给定 n,b,c,d,e n, b, c, d, en,b,c,d,e 以及 a0,a1,…an−1 a_0, a_1, \ldots a_{n - 1}a0,a1,…an−1,定义

xk=b×c4k+d×c2k+ef(x)=∑i=0n−1aixi

xkf(x)=b×c4k+d×c2k+e=∑i=0n−1aixi��=�×�4�+�×�2�+��(�)=∑�=0�−1����

xkf(x)=b×c4k+d×c2k+e=i=0∑n−1aixi

请你求出 f(x0),f(x1),⋯,f(xn−1) f(x_0), f(x_1), \cdots , f(x_{n - 1})f(x0),f(x1),⋯,f(xn−1) 对 106+3 10 ^ 6 + 3106+3 取模的值。

输入

第一行包括五个整数 n,b,c,d,e n, b, c, d, en,b,c,d,e。
接下来一行包括 n nn 个整数,代表 a0,a1,⋯,an−1 a_0, a_1, \cdots , a_{n - 1}a0,a1,⋯,an−1。

输出

n nn 行,第 i ii 行代表 f(xi−1) f(x_{i - 1})f(xi−1)。

样例输入 

3 1 2 3 4
0 1 2

样例输出 

136
2080
190036

提示

测试点编号n≤ n \leqn≤特殊条件
1500 500500
22000 20002000
310000 1000010000
420000 2000020000
530000 3000030000
640000 4000040000
750000 5000050000b=0 b = 0b=0
860000 6000060000b=0 b = 0b=0
960000 6000060000
1060000 6000060000

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
#include<functional>
#include<cmath>
#include<vector>
#include<assert.h>
//using namespace std;
using std::min;
using std::max;
using std::swap;
using std::sort;
using std::reverse;
using std::random_shuffle;
using std::lower_bound;
using std::upper_bound;
using std::unique;
typedef long long ll;
typedef unsigned long long ull;
typedef std::pair<int,int> pii;
typedef std::pair<ll,ll> pll;
void open(const char *s){
#ifndef ONLINE_JUDGEchar str[100];sprintf(str,"%s.in",s);freopen(str,"r",stdin);sprintf(str,"%s.out",s);freopen(str,"w",stdout);
#endif
}
int rd(){int s=0,c,b=0;while(((c=getchar())<'0'||c>'9')&&c!='-');if(c=='-'){c=getchar();b=1;}do{s=s*10+c-'0';}while((c=getchar())>='0'&&c<='9');return b?-s:s;}
void put(int x){if(!x){putchar('0');return;}static int c[20];int t=0;while(x){c[++t]=x%10;x/=10;}while(t)putchar(c[t--]+'0');}
int upmin(int &a,int b){if(b<a){a=b;return 1;}return 0;}
int upmax(int &a,int b){if(b>a){a=b;return 1;}return 0;}
const ll p=1000003;
const int N=530000;
ll fp(ll a,ll b)
{if(!b)return 1;b=(b%(p-1)+p-1)%(p-1);ll s=1;for(;b;b>>=1,a=a*a%p)if(b&1)s=s*a%p;return s;
}
namespace fft
{const int W=524288;const ll M=1000;typedef double db;db pi=acos(-1);struct cp{db x,y;cp(db a=0,db b=0):x(a),y(b){}};cp operator +(cp a,cp b){return cp(a.x+b.x,a.y+b.y);}cp operator -(cp a,cp b){return cp(a.x-b.x,a.y-b.y);}cp operator *(cp a,cp b){return cp(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}cp operator /(cp a,int b){return cp(a.x/b,a.y/b);}cp conj(cp a){return cp(a.x,-a.y);}cp muli(cp a){return cp(-a.y,a.x);}cp divi(cp a){return cp(a.y,-a.x);}int rev[N];cp *w[20];void fft(cp *a,int n,int t){for(int i=1;i<n;i++){rev[i]=(rev[i>>1]>>1)|(i&1?n>>1:0);if(rev[i]>i)swap(a[rev[i]],a[i]);}for(int i=2,s=1;i<=n;i<<=1,s++)for(int j=0;j<n;j+=i)for(int k=0;k<i/2;k++){cp u=a[j+k];cp v=a[j+k+i/2]*w[s][k];a[j+k]=u+v;a[j+k+i/2]=u-v;}if(t==-1){reverse(a+1,a+n);for(int i=0;i<n;i++)a[i]=a[i]/n;}}void dft(db *a,db *b,cp *c,cp *d,int n){static cp a1[N],a2[N];for(int i=0;i<n;i++)a1[i]=cp(a[i],b[i]);fft(a1,n,1);for(int i=0;i<n;i++)a2[i]=conj(a1[i]);reverse(a2+1,a2+n);for(int i=0;i<n;i++){c[i]=(a1[i]+a2[i])/2;d[i]=divi(a1[i]-a2[i])/2;}}void idft(db *a,db *b,cp *c,cp *d,int n){static cp a1[N];for(int i=0;i<n;i++)a1[i]=c[i]+muli(d[i]);fft(a1,n,-1);for(int i=0;i<n;i++){a[i]=a1[i].x;b[i]=a1[i].y;}}void init(){for(int i=1;i<=19;i++)w[i]=new cp[1<<(i-1)];for(int i=0;i<W/2;i++)w[19][i]=cp(cos(2*pi/W*i),sin(2*pi/W*i));for(int i=18;i>=1;i--)for(int j=0;j<1<<(i-1);j++)w[i][j]=w[i+1][j<<1];}void mul(ll *a,ll *b,ll *c,int n,int m,int l){static db a1[N],a2[N],b1[N],b2[N],c1[N],c2[N],d1[N],d2[N];static cp a3[N],a4[N],b3[N],b4[N],c3[N],c4[N],d3[N],d4[N];int k=1;while(k<=n+m)k<<=1;for(int i=0;i<k;i++)a1[i]=a2[i]=b1[i]=b2[i]=0;for(int i=0;i<=n;i++){a[i]=(a[i]+p)%p;a1[i]=a[i]/M;a2[i]=a[i]%M;}for(int i=0;i<=m;i++){b[i]=(b[i]+p)%p;b1[i]=b[i]/M;b2[i]=b[i]%M;}dft(a1,a2,a3,a4,k);dft(b1,b2,b3,b4,k);for(int i=0;i<k;i++){c3[i]=a3[i]*b3[i];c4[i]=a3[i]*b4[i];d3[i]=a4[i]*b3[i];d4[i]=a4[i]*b4[i];}idft(c1,c2,c3,c4,k);idft(d1,d2,d3,d4,k);for(int i=0;i<=l;i++)c[i]=((ll)(c1[i]+0.5)%p*M%p*M%p+(ll)(c2[i]+0.5)%p*M%p+(ll)(d1[i]+0.5)%p*M%p+(ll)(d2[i]+0.5)%p)%p;}
}
int n;
ll B,C,D,E;
ll a[N];
ll inv[N],fac[N],ifac[N];
void init()
{inv[1]=fac[0]=fac[1]=ifac[0]=ifac[1]=1;for(int i=2;i<=200000;i++){inv[i]=-p/i*inv[p%i]%p;inv[i]=(inv[i]+p)%p;fac[i]=fac[i-1]*i%p;ifac[i]=ifac[i-1]*inv[i]%p;}
}
namespace pregao
{ll b[N],c[N],s[N];void gao(){for(int i=0;i<n;i++){b[i]=a[n-i-1]*fac[n-i-1]%p;c[i]=ifac[i]*fp(E,i)%p;}fft::mul(b,c,s,n-1,n-1,n-1);reverse(s,s+n);}
}
namespace gao1
{ll d[N],e[N],f[N],g[N],h[N],ans[N];void gao(){pregao::gao();for(int i=0;i<n;i++){d[i]=pregao::s[i]*fp(D,i)%p*fp(C,(ll)i*i)%p*ifac[i]%p;e[i]=fp(C,-(ll)i*i);}fft::mul(d,e,f,n-1,n-1,n-1);reverse(d,d+n);e[0]=0;fft::mul(d,e,g,n-1,n-1,n-1);for(int i=0;i<n;i++){ans[i]=((f[i]+g[n-i-1])%p+p)%p;ans[i]=ans[i]*fp(C,(ll)i*i)%p;}for(int i=0;i<n;i++)printf("%lld\n",ans[i]);}
}
namespace gao2
{ll b[N],c[N],d[N],e[N],f[N],g[N],ans[N];void gao(){E=(E-D*D%p*fp(4*B,p-2)%p+p)%p;D=D*fp(2*B,p-2)%p;pregao::gao();for(int i=0;i<n;i++)b[2*n-2*i-2]=fac[2*i]*ifac[i]%p*pregao::s[i]%p*fp(B,i)%p;for(int i=0;i<2*n-1;i++)c[i]=fp(D,i)*ifac[i]%p;fft::mul(b,c,d,2*n-2,2*n-2,2*n-2);reverse(d,d+2*n-1);for(int i=0;i<2*n-1;i++){d[i]=d[i]*ifac[i]%p*fp(C,(ll)i*i)%p;e[i]=fp(C,-(ll)i*i);}fft::mul(d,e,f,n-1,n-1,n-1);reverse(d,d+2*n-1);e[0]=0;fft::mul(d,e,g,2*n-2,2*n-2,2*n-2);for(int i=0;i<n;i++)ans[i]=(fp(C,(ll)i*i)*(f[i]+g[2*n-i-2])%p+p)%p;for(int i=0;i<n;i++)printf("%lld\n",ans[i]);}
}
namespace gao0
{void gao(){ll ans=0;for(int i=n-1;i>=0;i--){ans=ans*(E+B+D)%p;ans=(ans+a[i])%p;}printf("%lld\n",ans);ans=0;for(int i=n-1;i>=0;i--){ans=ans*E%p;ans=(ans+a[i])%p;}for(int i=1;i<n;i++)printf("%lld\n",ans);}
}
int main()
{open("loj6067");fft::init();init();scanf("%d%lld%lld%lld%lld",&n,&B,&C,&D,&E);for(int i=0;i<n;i++)a[i]=rd();if(!C)gao0::gao();else if(!B)gao1::gao();elsegao2::gao();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/850045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装ps提示vcruntime140.dll丢失的解决方法,总结5种解决方法

在电脑使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到vcruntime140.dll”。这个问题可能会导致程序无法正常启动或运行&#xff0c;因此了解其原因和解决方法是非常必要的。小编将从多个方面对“找不到vcruntime140.dll”这一问题进行详细…

iBeacon赋能AR导航:室内定位技术的原理与优势

室内定位导航对于大型商场、机场、医院等复杂室内环境至关重要&#xff0c;它帮助人们快速找到目的地&#xff0c;提高空间利用率。AR技术通过将虚拟信息叠加在现实世界&#xff0c;提供直观导航指引&#xff0c;正在成为室内导航的新趋势&#xff0c;增强用户互动体验&#xf…

【算法训练记录——Day27】

Day27——回溯算法Ⅲ 1.组合总和2.组合总和II3.分割回文串 内容 ● 39.组合总和 ● 40.组合总和II ● 131.分割回文串 1.组合总和 思路&#xff1a;和组合总和一样&#xff0c;先从candidates中遍历选择元素&#xff0c;但是纵向递归时所选择元素要包括当前元素 vector<int&…

玩游戏时服务器遭到DDOS攻击崩溃,DDOS攻击是什么?

某网游服务器突然崩溃&#xff0c;大量玩家被迫下线。随后该游戏官方出面解释是因服务器遭遇了DDoS攻击&#xff0c;所以导致登录异常。这个DDoS攻击到底是哪里来的鬼怪&#xff0c;敢这么给自己加戏&#xff1f; 什么是DDoS攻击&#xff1f; DDoS攻击&#xff0c;专业表述是“…

JAVA 类变量与类方法

一、类变量 class Child{private String name;//定义一个变量count&#xff0c;是一个类变量&#xff08;静态变量&#xff09;static静态//该变量最大的特点就是会被Child 类的所有对象访问public static int count 0;public Child(String name){this.name name;}public vo…

【启程Golang之旅】协程和管道操作

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

积累常用css

1、封面文字&#xff0c;垂直居中&#xff0c;可以两列并排 font-size: 20px;font-weight: 600;color: #333;line-height: 20px;display: block;word-wrap: break-word;writing-mode: vertical-lr;height: 160px;margin: 0 auto; 2、宽border效果 .dashed-box { margin: 80px…

ubuntu22.04编译OpenCV4.9(带contrib-4.9.0)

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;4.9.0 opencv_contrib版本&#xff1a;4.9.0 源码下载 OPenCV4.9.0下载地址&#xff1a;https://github.com/opencv/opencv/releases/tag/4.9.0 如下图所示&#xff1a; 按箭头所指点击下载source code(tar.gz)文件到…

代码随想录算法训练营第三十一天|LeetCode455 分发饼干、LeetCode376 摆动序列

题1&#xff1a; 指路&#xff1a;455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 本题要求返回最多能满足的数量。根据对应原则&#xff0c;应当是大饼干满足胃口大的孩子&#xff0c;小饼干满足胃口小的孩子以物尽其用。我们可以从饼干入手…

从零开始实现自己的串口调试助手(9)-重置多文本框,保存/载入指令集

重置多文本框 添加多文本控件列表 在构造函数中把我们需要操作的控件归类到对应列表之中 //创建多文本存放数组 - 存放那三列内容 checkBox lineEdi btnfor(int i1;i<9;i){// 添加到按钮数组QString btnName QString("pushButton_t%1").arg(i); //构建对应控件名…

DSP问题:TMS320F280049延时和实际不符

1、问题现象 我之前写的一篇点灯文章&#xff0c;发现LED等闪烁频率和设想不一致&#xff0c;延时100ms&#xff0c;实际延时要更长。 2、问题原因 电路中使用的晶振是10MHz&#xff0c;实际代码中配置的是20MHz的晶振。 3、解决方案 修改代码中的晶振配置为10MHz即可。…

【Redis】Redis经典问题:缓存穿透、缓存击穿、缓存雪崩

目录 缓存的处理流程缓存穿透解释产生原因解决方案1.针对不存在的数据也进行缓存2.设置合适的缓存过期时间3. 对缓存访问进行限流和降级4. 接口层增加校验5. 布隆过滤器原理优点缺点关于扩容其他使用场景SpringBoot 整合 布隆过滤器 缓存击穿产生原因解决方案1.设置热点数据永不…

【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

力扣hot100:394. 字符串解码(递归)

LeetCode&#xff1a;394. 字符串解码 本题容易想到用递归处理&#xff0c;在写递归时主要是需要明确自己的递归函数的定义。 不过我们也可以利用括号匹配的方式使用栈进行处理。 1、递归 定义递归函数string GetString(string & s,int & i); 表示处理处理整个numbe…

list模拟与实现(附源码)

文章目录 声明list的简单介绍list的简单使用list中sort效率测试list的简单模拟封装迭代器insert模拟erase模拟头插、尾插、头删、尾删模拟自定义类型迭代器遍历const迭代器clear和析构函数拷贝构造&#xff08;传统写法&#xff09;拷贝构造&#xff08;现代写法&#xff09; 源…

Django与MySQL:配置数据库的详细步骤

文章目录 Django-MySQL 配置配置完执行数据迁移&#xff0c;如果报错: Error loading MySQLdb module&#xff0c; Django-MySQL 配置 # settings.pyDATABASES {# 默认配置sqlite3数据库# default: {# ENGINE: django.db.backends.sqlite3,# NAME: BASE_DIR / db.sqli…

Flutter 中的 ListTileTheme 小部件:全面指南

Flutter 中的 ListTileTheme 小部件&#xff1a;全面指南 Flutter 是一个功能强大的 UI 框架&#xff0c;由 Google 开发&#xff0c;允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的 Material 组件库中&#xff0c;ListTile 是一个用于展示列表项的…

[word] word文字间隙怎么调整? #媒体#职场发展

word文字间隙怎么调整&#xff1f; 在文档中的数据包含英文、数字、中文等&#xff0c;会有间隙&#xff0c;有时候误以为是空格&#xff0c;但是根本删除不了&#xff0c;其实这是默认的间隙&#xff0c;是可以调整的&#xff0c;下面教大家word文字间隙怎么调整的操作&#…

c#与汇川plc通信

前言 上位机开发中有时会要求与PLC进行通信。所以这里写了个简单的例子。 在C#中与汇川PLC进行通信&#xff0c;你可以使用S7NetPlus库&#xff0c;这是一个开源的库&#xff0c;专门用于与西门子S7系列PLC进行通信&#xff0c;其中也包括汇川PLC。 1.安装第三方库 需要安装S7…