VP记录——The 2021 CCPC Weihai Onsite

news2024/11/15 21:35:26

网址

2021CCPC威海

赛时过题与罚时

在这里插入图片描述

A.Goodbye, Ziyin!

签到题,队友写的

#include<bits/stdc++.h>
using namespace std;
int cnt[10], de[1000010];
int main() {
	int n;
	cin >> n;
	for(int i = 1; i < n; ++i) {
		int u, v;
		scanf("%d %d", &u, &v);
		++de[u];
		++de[v];
	}
	for(int i = 1; i <= n; ++i) {
		if(de[i] > 3) {
			cout << "0";
			return 0;
		}
		cnt[de[i]]++;
	}
	cout << cnt[1] + cnt[2];
	return 0;
}

D.Period

队友写的KMP,签到题

#include <bits/stdc++.h>
using namespace std;
#define MAXN 1000005
char s[MAXN];
int nxt[MAXN];
int n;
int ans[MAXN];
int main()
{
    scanf("%s", s + 1);
    n = strlen(s + 1);
    int j = 0;
    for(int i = 2; i <= n; ++i)
    {
        while(j && s[i] != s[j + 1]) j = nxt[j];
        if(s[i] == s[j + 1]) j++;
        nxt[i] = j;
    }
    /* for(int i = 1; i <= n; ++i)
     * {
     *     cout << nxt[i] << " ";
     * }
     * cout << "\n"; */
    j = nxt[n];
    while(j)
    {
        int l = j;
        int r = n - l + 1;
        if(r > l)
        {
            ans[r] --;
            ans[l + 1] ++;
        }
        j = nxt[j];
    }
    for(int i = 1; i <= n; ++i)
        ans[i] = ans[i] + ans[i-1];
    /* for(int i = 1; i <= n; ++i)
     * {
     *     cout << ans[i] << " ";
     * }
     * cout << "\n"; */
    int q;
    scanf("%d", &q);
    while(q--)
    {
        int l;
        scanf("%d", &l);
        printf("%d\n", ans[l]);
    }
    return 0;
}

G. Shinyruo and KFC

简单组合计数
k < m a x ( a i ) k<max(a_i) k<max(ai),显然无解
有解时答案是 ∏ i = 1 n C ( k , a i ) = ∏ i = 1 n k ! a i ! ∗ ( k − a i ) ! \prod_{i=1}^{n} C(k,a_i)=\prod_{i=1}^{n} \frac{k!}{{a_i}!*(k-a_i)!} i=1nC(k,ai)=i=1nai!(kai)!k!
这样显然有一个 O ( m n ) O(mn) O(mn)的做法
观察数据性质 ∑ i = 1 n a i < = 1 e 5 \sum_{i=1}^{n}a_i<=1e5 i=1nai<=1e5
a i a_i ai的种类数量级别为 s q r t ( n ) sqrt(n) sqrt(n)
那么就可以把相同的 a i a_i ai一起做,优化成 O ( m n ) O(m\sqrt{n}) O(mn )

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+5;
const int MOD = 998244353;
int n, m, a[N];
ll b[N];
ll c[N];
ll cnt[N];
ll power(ll x, ll y) {
	if(y == 0) {
		return 1;
	}
	ll res = 1;
	while(y)
	{
		if(y&1) res = res * x % MOD;
		x  = x * x % MOD; y >>= 1;
	}
	return res;
}
ll ni(ll x) {
	return power(x, MOD - 2);
}
int main() {
	scanf("%d %d", &n, &m);
	b[0] = 1;
	for(ll i = 1; i <= 1e5; ++i) {
		b[i] = b[i - 1] * i % MOD;
		c[i] = power(b[i], n);
	}
	int mx = 0;
	for(ll i = 1; i <= n; ++i ) {
		scanf("%d", &a[i]);
		++cnt[a[i]];
		mx = max(mx, a[i]);
	}
	sort(a + 1, a + 1 + n);
	n = unique(a + 1, a + 1 + n) - (a + 1);
	for(int k = 1; k <= m; ++k) {
		if(k < mx) {
			puts("0");
			continue;
		}
		ll ans = c[k];
		for(ll i = 1; i <= n; ++i) {
			ll t = b[a[i]] * b[k - a[i]] % MOD;
			t = power(t, cnt[a[i]]);
			ans = ans * ni(t) % MOD;
		}
		printf("%lld\n", ans);
	}
	return 0;
}

H. city safet

发现 n n n的范围很像网络流,然后就往这方面想,后面发现每当多选择一个距离相当于是获得了 v i + 1 − v i v_{i+1}-v_{i} vi+1vi的贡献,每当修复了一个点,相当于是花费了 w i w_i wi,我们要统一边权的性质,即我们可以想办法把问题变成最大贡献或者最小花费
那么我们可以假设初始时全部修复,
那么每个点建立 n n n个代表点, i d i , j id_{i,j} idi,j表示以点 i i i为中心,距离 < = j <=j <=j的一类点,共 n ∗ n n*n nn个代表点
然后建立 n n n个具体点 1 1 1 n n n
对于建图而言,
i i i个点的代表点 j j j向代表点 j − 1 j-1 j1连边, ( i , j ) − > ( i , j − 1 ) (i,j)->(i,j-1) (i,j)>(i,j1),边权为 v j − v j − 1 v_{j}-v_{j-1} vjvj1,可理解成是反悔边,反悔这次距离的添加
每个代表点 ( i , j ) (i,j) (i,j)连向所有跟 i i i距离为 j j j的具体点, ( i , j ) − > k 当 d i s [ i ] [ k ] = j (i,j)->k 当dis[i][k]=j (i,j)>kdis[i][k]=j,边权为无穷
源点向所有代表点连边,边权为无穷, S − > ( i , j ) S->(i,j) S>(i,j)
所有具体点向汇点连边,边权为对应的 w i w_i wi i − > T i->T i>T,因为一个点最坏情况就是直接修了它
那么最小花费就是求最小割,直接网络流即可
那么答案就是 n ∗ v n − m a x f l o w n*v_n-maxflow nvnmaxflow

#include<bits/stdc++.h>
#define INF 0x7fffffff
using namespace std;

const int N = 205;
const int M = 4e5+5;

struct node {
	int to, next, w;
}e[M];
int n, m, k = 1, head[M], d[M];
int id[N][N], w[N], v[N];
int f[N][N];
int S, T, Maxflow, Num;

void build(int u, int v, int w) {
	e[++k] = (node) {v, head[u], w};
	head[u] = k;
	e[++k] = (node) {u, head[v], 0};
	head[v] = k;
}

queue<int> q;

bool bfs() {
	while(!q.empty()) q.pop();
	for(int i = S; i <= T; ++i) d[i] = 0;
	d[S] = 1;
	q.push(S);
	while(!q.empty()) {
		int u = q.front();
		q.pop();
		for(int i = head[u]; i; i = e[i].next){
			int v = e[i].to;
			if(e[i].w && !d[v]) {
				d[v] = d[u] + 1;
				q.push(v);
				if(v == T) return 1;
			}
		}
	}
	return 0;
}
int dfs(int dep, int flow) {
	if(dep == T) {
		return flow;
	}
	int rest = flow, rp = 0;
	for(int i = head[dep]; i && rest; i = e[i].next) {
		int v = e[i].to;
		if(d[v] == d[dep] + 1 && e[i].w) {
			rp = dfs(v, min(e[i].w, rest));
			if(!rp) {
				d[v] = 0;
			}
			e[i].w -= rp;
			e[i ^ 1].w += rp;
			rest -= rp;
		}
	}
	return flow - rest;
}
void dinic() {
	int flow;
	while(bfs()) {
		while(flow = dfs(S, INF)) {
			Maxflow += flow;
		}
	}
}
 
int main() {
	scanf("%d", &n);
	S = 0;
	T = n*n+n+1;
	for (int i = 1; i <= n; i++) scanf("%d", &w[i]);
	for (int i = 1; i <= n; i++) scanf("%d", &v[i]); 
	int U, V;
	memset(f, 0x3f, sizeof(f));
	for (int i = 1; i < n; i++) {
		scanf("%d%d", &U, &V);
		if (U != V) f[U][V] = f[V][U] = 1;
	}
	for (int i = 1; i <= n; i++) build(i, T, w[i]);
	Num = n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++) id[i][j] = ++Num;
    for (int i = 1; i <= n; i++) {
    	for (int j = 1; j <= n; j++) {
    		build(S, id[i][j], v[j]-v[j-1]);
    		build(id[i][j], id[i][j-1], INF); 
		}
	}    
	for (int i = 1; i <= n; i++) f[i][i] = 0;
	for (int k = 1; k <= n; k++)
	   for (int i = 1; i <= n; i++)
	       for (int j = 1; j <= n; j++) f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
	for (int i = 1; i <= n; i++) 
		for (int j = 1; j <= n; j++) {
			build(id[i][f[i][j]+1], j, INF); 
		}
	dinic();
	printf("%d\n", n*v[n]-Maxflow);
	return 0;
}

J.Circular Billiard Table

签到题,我写的,题意是给一个入射角,求在圆内最少弹射多少次能回到原点
入射角是 a b \frac{a}{b} ba,那么假设有 x x x个转角,要弹 y y y
显然有 a b ∗ x ∗ 2 = 360 ∗ y \frac{a}{b}*x*2=360*y bax2=360y
构造 x = 180 ∗ b , y = a x=180*b,y=a x=180b,y=a然后除 g c d gcd gcd就可以了

#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
 
ll gcd(ll a, ll b) {
	return (!b) ? a : gcd(b, a%b);
}
ll t, a, b;
 
int main() {
	scanf("%lld", &t);
	while (t--) {
		scanf("%lld%lld", &a, &b);
		long long A = 180*b, B = a;
		ll c = gcd(A, B);
		ll ans = A/c-1;
		printf("%lld\n", ans);
	}
	return 0;
} 

M.810975

题意是构造一个长度为 n n n的01串,其中有 m m m个1,最长连续1 等于 k k k,问总方案数
相当于是在0的 n − m + 1 n-m+1 nm+1个空隙里面插入1
容斥一下,
答案即为
n − m + 1 n-m+1 nm+1个数中,满足 0 < = x i < = k 0<=x_i<=k 0<=xi<=k ( ∑ i = 1 n − m + 1 x i ) = m (\sum_{i=1}^{n-m+1}x_i)=m (i=1nm+1xi)=m的方案数
减去
n − m + 1 n-m+1 nm+1个数,满足 0 < = x i < = k − 1 0<=x_i<=k-1 0<=xi<=k1 ( ∑ i = 1 n − m + 1 x i ) = m (\sum_{i=1}^{n-m+1}x_i)=m (i=1nm+1xi)=m的方案数

经典问题,队友直接秒了!

#include <bits/stdc++.h>
using namespace std;
#define mo 998244353
#define maxn 1000005
#define MAXN 1000005
#define ll long long
namespace Poly
{
    inline void Add(int &x,int y){x+=y;x-=(x>=mo?mo:0);}
    inline int add(int x,int y){x+=y;return x>=mo?x-mo:x;}
    int A[maxn],B[maxn],C[maxn],D[maxn],E[maxn],inv[maxn],R[maxn],len,sz,ny;
    inline int ksm(int x,int y=mo-2)
    {
        int a=1;if(y<0)y+=mo-1;
        while(y)
        {
            if(y&1)a=1ll*a*x%mo;
            x=1ll*x*x%mo;y>>=1;
        }return a;
    }
    inline void init(int n)
    {
        int i;inv[1]=1;
        for(i=2;i<=n;++i)inv[i]=1ll*(mo-mo/i)*inv[mo%i]%mo;
    }
    inline void Inte(int *a,int n)
    {
        for(int i=n-1;i>=1;--i)
            a[i]=1ll*a[i-1]*inv[i]%mo;
        a[0]=0;
    }
    inline void Deri(int *a,int n)
    {
        for(int i=1;i<n;++i)
            a[i-1]=1ll*a[i]*i%mo;
        a[n-1]=0;
    }
    inline void pre(int n)
    {
        len=1,sz=-1;while(len<n)len<<=1,++sz;ny=ksm(len);
        for(int i=1;i<len;++i)R[i]=(R[i>>1]>>1)|((i&1)<<sz);
    }
    inline void NTT(int *a,int fl)//fl==1?3:332748118;
    {
        int i,j,k,t,y,p,w,wn;
        for(i=1;i<len;++i)if(i<R[i])swap(a[i],a[R[i]]);
        for(i=2,p=1;i<=len;p=i,i<<=1)
            for(wn=ksm(fl,(mo-1)/i),j=0;j<len;j+=i)
                for(w=1,k=0;k<p;++k,w=1ll*w*wn%mo)
                {
                    t=a[j|k],y=1ll*w*a[j|k|p]%mo;
                    a[j|k]=add(t,y),a[j|k|p]=add(t,mo-y);
                }
    }
    inline void Mul(int *a,int *b,int *c,int nm,int n,int m)//a is the ans;
    {
        if(!n||!m){fill(a,a+nm,0);return ;}pre(n+m-1);
        for(int i=0;i<n;++i)A[i]=b[i];fill(A+n,A+len,0);
        for(int i=0;i<m;++i)B[i]=c[i];fill(B+m,B+len,0);
        NTT(A,3);NTT(B,3);
        for(int i=0;i<len;++i)A[i]=1ll*A[i]*B[i]%mo;
        NTT(A,332748118);
        for(int i=0;i<nm;++i)a[i]=1ll*A[i]*ny%mo;
    }
    inline void Inv(int *a,int *b,int n)//this n include zero position;
    {
        if(n==1)return a[0]=ksm(b[0]),void();
        int m=(n+1)>>1,i;Inv(a,b,m);pre(n<<1);
        for(i=0;i<m;++i)A[i]=a[i];fill(A+m,A+len,0);
        for(i=0;i<n;++i)B[i]=b[i];fill(B+n,B+len,0);
        NTT(A,3);NTT(B,3);
        for(i=0;i<len;++i)A[i]=1ll*A[i]*add(2,mo-1ll*A[i]*B[i]%mo)%mo;
        NTT(A,332748118);
        for(i=0;i<n;++i)a[i]=1ll*A[i]*ny%mo;
    }
    inline void Ln(int *a,int *b,int n)//a is the ans;b[0]need equal 1;
    {
        Inv(a,b,n);int i;pre(n<<1);
        for(i=0;i<n;++i)C[i]=b[i];Deri(C,n);
        for(i=0;i<n;++i)A[i]=a[i];fill(A+n,A+len,0);
        for(i=0;i<n;++i)B[i]=C[i];fill(B+n,B+len,0);
        NTT(A,3);NTT(B,3);
        for(i=0;i<len;++i)A[i]=1ll*A[i]*B[i]%mo;
        NTT(A,332748118);
        for(i=0;i<n;++i)a[i]=1ll*A[i]*ny%mo;
        Inte(a,n);
    }
    inline void Exp(int *a,int *b,int n)//a is the ans;
    {
        if(n==1)return a[0]=1,void();
        int m=(n+1)>>1,i;Exp(a,b,m);Ln(D,a,n);pre(n<<1);
        for(i=0;i<m;++i)A[i]=a[i];fill(A+m,A+len,0);
        for(i=0;i<n;++i)B[i]=add(b[i],mo-D[i]);++B[0];fill(B+n,B+len,0);
        NTT(A,3);NTT(B,3);
        for(i=0;i<len;++i)A[i]=1ll*A[i]*B[i]%mo;
        NTT(A,332748118);
        for(i=0;i<n;++i)a[i]=1ll*A[i]*ny%mo;
    }
    inline void Ksm(int *a,int *b,int n, ll k)//a b should be differented;a is the ans;b[0] need equal 1;
    {
        Ln(E,b,n);k%=mo;
        for(int i=0;i<n;++i)E[i]=1ll*E[i]*k%mo;
        Exp(a,E,n);
    }
}
int n, m, k;
int a[MAXN];
int b[MAXN];
int main()
{
    cin >> n >> m >> k;
    if(n == 0)
    {
        if(m == 0 && k == 0) { cout << 1 << "\n"; return 0; }
        else { cout << 0 << "\n"; return 0; }
    }
    if(n < m) { cout << 0 << "\n"; return 0;}
    if(m < k) { cout << 0 << "\n"; return 0; }
    if(m == 0)
    {
        if(k == 0) { cout << 1 << "\n"; return 0;}
        else { cout << 0 << "\n"; return 0;}
    }
    if(k == 0)
    {
        if(m == 0) { cout << 1 << "\n"; return 0;}
        else { cout << 0 << "\n"; return 0; }
    }
    n = n - m + 1;
    Poly::init(800000);
    memset(a, 0, sizeof a);
    for(int i = 0; i <= k; ++i) a[i] = 1;
    Poly::Ksm(b, a, m + 1, n);
    int ans = b[m];
    memset(a, 0, sizeof a);
    for(int i = 0; i < k; ++i) a[i] = 1;
    memset(b, 0, sizeof b);
    Poly::Ksm(b, a, m + 1, n);
    ans = (ans - b[m] + mo) % mo;
    cout << ans << "\n";
    return 0;
}

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

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

相关文章

Spring Boot自动加载

问&#xff1a;自动装配如何实现的&#xff1f; 答&#xff1a;简单来说就是自动去把第三方组件的Bean装载到IOC容器中&#xff0c;不需要开发人员再去写Bean相关的配置&#xff0c;在springboot应用里面只需要在启动类上去加上SpringBootApplication注解&#xff0c;就可以去实…

自动售货机销售数据分析与应用

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 摘要&#xff1a; 本案例将主要结合自动售货机的实际情况&#xff0…

天软特色因子看板(2023.10 第04期)

该因子看板跟踪天软特色因子A05005(近一月单笔流通金额占比(%)&#xff0c;该因子为近一个月单笔流通金额占比因子&#xff0c;用以刻画股票在收盘时&#xff0c;主力资金在总交易金额中所占的比重。。 今日为该因子跟踪第04期&#xff0c;跟踪其在SW801010 (申万农林牧渔) 中的…

浅述TSINGSEE视频技术与视频智能分析能力在城市治理中的典型应用场景

TSINGSEE青犀视频以“视频汇聚视频智能分析”为支撑&#xff0c;面向各委办局提供城市市域治理场景、城市基层治理场景的视频数字化、智能化、智慧化应用&#xff0c;推进城市治理体系和治理能力现代化。 安防视频汇聚系统EasyCVR视频综合管理平台支持接入与整合已建的社会视频…

MySQL 1 数据库概述知识

一、数据库概述 1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以“固化”&#xff0c;而持久化的实现过程大多通…

美妆SDK哪家便宜?

在今天的数字化时代&#xff0c;人工智能和机器学习正在改变我们的生活。特别是在美妆行业&#xff0c;这些技术的应用已经开始改变消费者的购物习惯和企业的营销策略。为了满足这个需求&#xff0c;美摄推出了一款美妆SDK&#xff0c;专为企业提供技术支持。一、美摄美妆SDK具…

简单聊聊低代码

在数字经济迅速发展的背景下&#xff0c;越来越多的企业开始建立健全业务系统、应用、借助数字化工具提升管理效率&#xff0c;驱动业务发展&#xff0c;促进业绩增长。在这一过程中&#xff0c;和许多新技术一样&#xff0c;低代码&#xff08;Low-code&#xff09;开发被推上…

c++视觉检测------Shi-Tomasi 角点检测

Shi-Tomasi 角点检测 &#xff1a;goodFeaturesToTrack() goodFeaturesToTrack() 函数是 OpenCV 中用于角点检测的功能函数。它的主要作用是检测图像中的良好特征点&#xff0c;通常用于计算机视觉任务中的光流估算、目标跟踪等。 函数签名&#xff1a; void goodFeaturesTo…

【C++14算法】exchange和quoted

文章目录 前言一、exchange函数1.1 exchange函数简介&#xff1a;1.2 函数原型1.3 示例代码示例1&#xff1a;替换整数对象示例2&#xff1a;替换字符串对象示例3&#xff1a;替换自定义类型对象示例4&#xff1a;替换指针对象 二、quoted函数2.1 简介&#xff1a;2.2 示例代码…

uniapp左滑列表删除

目录 效果index.vuedelSlideLeft.vuedelRightIconfont.css参考插件最后 效果 index.vue 使用页面 引入封装的页面delSlideLeft.vue <template><view class""><view v-for"(item, index) in busOrderList" :key"index" :data-in…

Python 单元测试设置

单元测试检查特定代码单元或模块是否按照开发人员的预期执行。 大多数时候&#xff0c;我们测试的代码单元是一个函数。 同样&#xff0c;我们可以测试所有功能。 作为最佳实践&#xff0c;至少在开发过程中&#xff0c;我们应该进行单元测试。 因此&#xff0c;在开发过程的…

k8s - Flannel

1.Flannel概念剖析 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络&#xff08;Overlay Network&#xff09;工具&#xff0c;其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方…

MySQL系列索引专题

存储引擎 1.MySQL 的体系结构可以分为四层 连接层&#xff1a;最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限服务层&#xff1a;第二层架构主要完成大多数的核心…

Redis实现简易消息队列的三种方式

Redis实现简易消息队列的三种方式 消息队列简介 消息队列是一种用于在计算机系统中传递和处理数据的重要工具。如果你完全不了解消息队列&#xff0c;不用担心&#xff0c;我将尽力以简单明了的方式来解释它。 首先&#xff0c;想象一下你正在玩一个游戏&#xff0c;而游戏中…

怎么把heic改成jpg?方法大全在这里

怎么把heic改成jpg&#xff1f;HEIC是一种现代的图像文件格式。它是由ISO制定的标准&#xff0c;并得到了苹果公司的支持和推广。与JPG等传统图像格式相比&#xff0c;HEIC格式可以提供更好的图像质量&#xff0c;并且占用更少的存储空间。这使得它在手机、平板电脑和其他移动设…

Java中在循环体内拼接字符串时为什么使用StringBuilder而不是String

在循环体内拼接字符串时为什么使用StringBuilder而不是String 在《阿里巴巴Java开发手册》一书中提到了&#xff1a; 循环体内&#xff0c;字符串的连接方式&#xff0c;请使用 StringBuilder 的 append 方法进行扩展。&#xff08;而不要用String的方式&#xff09; 说明&…

解决IP地址欺骗的网络安全策略

随着互联网的不断发展&#xff0c;网络安全已经成为企业和个人关注的重要问题。其中&#xff0c;IP地址欺骗是一种常见的威胁&#xff0c;它可能导致数据泄露、身份伪装和网络攻击。 1. 使用防火墙和入侵检测系统 防火墙和入侵检测系统&#xff08;IDS&#xff09;是网络安全…

Sui的动态可组合NFT为Cosmocadia增加游戏趣味性

的新游戏Cosmocadia展示了Sui NFT如何在游戏中四处走动&#xff0c;种植和收获蔬菜&#xff0c;并在工作台上制作工具和家具。未来将更新利用NFT&#xff0c;如私人土地&#xff0c;甚至让玩家将他们的SuiFrens NFT带入游戏中。 Lucky Kat Studios的产品经理Bente Bolland将Co…

神奇的代码恢复工具

文章目录 概述工具展示工具下载地址运行过程附件待恢复代码 概述 小C是一名程序猿&#xff0c;他有好多新奇的点子&#xff0c;也乐于把这些变成文字分享给大家。这些分享大部分都与代码相关&#xff0c;在文章里面把这些代码全部按本来的结构展示出来也不是一件容易的事&…

LMI FocalSpec 3D线共焦传感器 使用笔记1

一.硬件介绍 以上特别注意: 屏蔽线必须接地,因为在现场实际调试中,使用软件调试发现经常 弹窗 传感器丢失警告!! 以上 Position LED 的灯被钣金挡住,无法查看异常现象,能否将指示灯设置在软件界面上? 需要确认是软触发还是硬触发,理论上 硬触发比软触发速度要快.(我们目前使用…