2023“钉耙编程”中国大学生算法设计超级联赛(5)

Typhoon 计算几何,点到线段距离

String Magic (Easy Version) Manacher可持久化线段树

Touhou Red Red Blue DP 模拟

Expectation (Easy Version)    签到,组合数学

Tree 树形DP

Cactus Circuit 仙人掌图,tarjan找简单环

Counting Stars 暴力,组合数学

直接套计算几何模板,求点到线段最短距离即可 

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
# define mod 1000000007
double feng[10000+10][2],wo[10000+10][2];
class Point
{

public:
    double x,y;

    Point(double x=0,double y=0):x(x),y(y) {}

    //向量加法
    Point operator+(Point p)
    {
        return Point(x+p.x,y+p.y);
    }
    //向量减法
    Point operator-(Point p)
    {
        return Point(x-p.x,y+p.y);
    }
    //向量伸缩
    Point operator*(double a)
    {
        return Point(x*a,y*a);
    }
    Point operator/(double a)
    {
        return Point(x/a,y/a);
    }
    //向量大小
    double abs()
    {
        return sqrt(norm());
    }
    //向量范数
    double norm()
    {
        return x*x+y*y;
    }

    bool operator<(const Point &p) const
    {
        return x!=p.x?x<p.x:y<p.y;
    }

    bool operator==(const Point &p)const
    {
        return x-p.x<1e-10&&y-p.y<1e-10;
    }

};

typedef Point Vector;

//向量内积
double dot(Vector a,Vector b)
{
    return a.x*b.x+a.y*b.y;
}

//向量外积
double cross(Vector a,Vector b)
{
    return abs(a.x*b.y-a.y*b.x);
}

//正交
bool isOrthogonal(Vector a,Vector b)
{
    return a.x*b.x+a.y*b.y==0;
}
//平行
bool isParallel(Vector a,Vector b)
{
    return a.x*b.y-a.y*b.x==0;
}

//投影
Point project(Point a,Point b,Point c)
{
    Vector ab(b.x-a.x,b.y-a.y);
    Vector ac(c.x-a.x,c.y-a.y);
    double  r=dot(ab,ac)/ab.norm();//比例
    Vector h(ab*r);
    return Point(a.x+h.x,a.y+h.y);
}

//映象

Point reflect(Point a,Point b,Point c)
{
    //c到ab的投影点
    Point r=project(a,b,c);
    Vector cr(r.x-c.x,r.y-c.y);
    //cr扩大二倍
    Vector cr_2=cr*2;//上面重载过*
    //向量加法
    return Point(c.x+cr_2.x,c.y+cr_2.y);
}

//两点间距离
double getDistancePP(Point a,Point b)
{
    Point c(b.x-a.x,b.y-a.y);
    return  c.abs();
}

//点到直线距离(利用外积平行四边形)
double getDistancePL(Point a,Point b,Point c)
{
    Vector ab(b.x-a.x,b.y-a.y);
    Vector ac(c.x-a.x,c.y-a.y);

    return cross(ab,ac)/ab.abs();
}

//点到线段距离
double getDistancePS(Point a,Point b,Point c)
{
    //定义4个向量
    Vector ab(b.x-a.x,b.y-a.y);
    Vector ba(a.x-b.x,a.y-b.y);
    Vector ac(c.x-a.x,c.y-a.y);
    Vector bc(c.x-b.x,c.y-b.y);

    if(dot(ab,ac)<0.0) return getDistancePP(a,c);
    if(dot(ba,bc)<0.0) return getDistancePP(b,c);

    return getDistancePL(a,b,c);
}


//线段到线段的距离
double getDistanceSS(Point a,Point b,Point c,Point d)
{
    //从4个点到2线段距离中取最小
    return min(min(getDistancePS(c,d,a),getDistancePS(c,d,b)),min(getDistancePS(a,b,c),getDistancePS(a,b,d)));
}

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);

    for(int i=1; i<=n; i++)
    {
        scanf("%lf%lf",&feng[i][0],&feng[i][1]);
    }

    for(int i=1; i<=m; i++)
    {
        scanf("%lf%lf",&wo[i][0],&wo[i][1]);
    }

    for(int i=1; i<=m; i++)
    {
        double minn=1e18;
        for(int j=2; j<=n; j++)
        {
            struct Point A,B,C;
            A.x=wo[i][0];
            A.y=wo[i][1];
            B.x=feng[j-1][0];
            B.y=feng[j-1][1];
            C.x=feng[j][0];
            C.y=feng[j][1];
            double temp=getDistancePS(B,C,A);
            //  cout<<temp<<" ";
            minn=min(minn,temp);
        }

        // cout<<endl;

        cout<<fixed<<setprecision(4)<<minn<<'\n';
    }

    return 0;
}

 

按照给出的约束,可以推出,这是一个偶数长度的字符串,左半部分是回文,右半部分也是回文,并且整体也是回文。也就是说,我们需要找出全部的偶数回文串,它的左半部分也是回文串。按照回文的奇偶性来判断。以左半部分是偶数回文为例,假设i位置到i+1位置的最大回文半径为图中长方形。如果回文半径为偶数,则左半部分的回文中心应该在中间位置,到i-1位置之间。只有这样,对称出来的字符串才能覆盖i,且保证左半部分的内部回文左右相等。比如偏向更左侧,会导致左右不均,超出左半部分的左边界。

而对于奇数回文,也是同理,不再赘述。

维护采用可持久化线段树,每次将回文中心所在线段树的右端点加1,查询时,取合法回文半径区间,求出其大于等于i位置的和即可。

 

#include <bits/stdc++.h>
using namespace std ;
typedef long long int ll;
int P[200000+10];
string s;
int d[200000+10][2];
int lson[200000*30+10],rson[200000*30+10],sum[200000*30+10];
int tot;
int clone(int root)
{
    tot++;
    lson[tot]=lson[root];
    rson[tot]=rson[root];
    sum[tot]=sum[root];
    return tot;
}
int build(int root,int l,int r)
{
    root=clone(root);
    if(l==r)
    {
        sum[root]=0;
        return root;
    }
    int mid=(l+r)>>1;
    lson[root]=build(lson[root],l,mid);
    rson[root]=build(rson[root],mid+1,r);
    sum[root]=0;
    return root;
}
int change(int root,int l,int r,int pos)
{
    root=clone(root);
    if(l==r)
    {
        sum[root]++;
        return root;
    }
    int mid=(l+r)>>1;
    if(pos<=mid)
        lson[root]=change(lson[root],l,mid,pos);
    else
        rson[root]=change(rson[root],mid+1,r,pos);
    sum[root]=sum[lson[root]]+sum[rson[root]];
    return root;
}
int getsum(int root1,int root2,int l,int r,int pos)
{
    if(pos<=l)
        return sum[root2]-sum[root1];
    int mid=(l+r)>>1;
    int ans=0;
    if(pos<=mid)
    {
        ans+=getsum(lson[root1],lson[root2],l,mid,pos);
        ans+=getsum(rson[root1],rson[root2],mid+1,r,pos);
        return ans;
    }
    else
    {
        ans+=getsum(rson[root1],rson[root2],mid+1,r,pos);
    }
    return ans;
}
int root[200000+10][2];
signed main()
{

    cin.tie(0);
    ios::sync_with_stdio(0);
    int t;
    cin>>t;
    while(t--)
    {
        cin>>s;
        string temp="";
        temp=" ";
        int mid=0,r=0;
        for(int i=0; i<s.length(); i++)
        {
            temp+='#';
            temp+=s[i];
        }
        temp+='#';
        temp+='@';
        for(int i=1; i<temp.length(); i++)
        {
            if(r<i)
                P[i]=1;
            else
                P[i]=min(P[2*mid-i],r-i);
            while(temp[i-P[i]]==temp[i+P[i]])
                P[i]++;
            if(mid+P[i]>r)
            {
                r=mid+P[i];
                mid=i;
            }
        }
        for(int i=1; i<temp.length(); i++)
        {
            if(i%2==0)
            {
                d[i/2][1]=P[i]/2;
            }
            else if(i>=3)
            {
                d[i/2][0]=P[i]/2;
            }
        }
        int n=s.length();
        tot=0;
        root[0][0]=build(0,1,n);
        root[0][1]=build(0,1,n);
        ll ans=0;
        for(int i=1; i<n; i++)
        {
            root[i][1]=change(root[i-1][1],1,n,i+d[i][1]-1);
            if(d[i][0])
            {
                int pre=0;
                if(d[i][0]%2==0)
                    pre=i-d[i][0]/2;
                if(d[i][0]%2==1)
                    pre=i-d[i][0]/2-1;
                ans+=getsum(root[pre][1],root[i][1],1,n,i);
            }
            if(i!=n)
                root[i][0]=change(root[i-1][0],1,n,i+d[i][0]);
            if(d[i][0]>1)
            {

                int pre=0;
                if(d[i][0]%2==0)
                    pre=i-d[i][0]/2-1;
                if(d[i][0]%2==1)
                    pre=i-d[i][0]/2-1;
                ans+=getsum(root[pre][0],root[i-1][0],1,n,i);
            }
        }
        cout<<ans<<'\n';
    }
    return 0;
}

 设dp[i][j]为第一个是i第二个是j的状态时的最大收益。其中i,j=0时代表空,值得注意的是,不能直接用dp数组推dp数组,需要暂时存储一下之前状态,再进行转移。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 7;
int dp[5][5], cp[5][5];
bool ext[5][5], cext[5][5];
int q[N];
char s[N];
int main()
{
    int t;
    scanf("%d", &t);
    while (t--)
    {
        memset(dp, 0, sizeof dp);
        memset(ext, 0, sizeof ext);
        scanf("%s", s);
        int n = strlen(s);
        for (int i = 1; i <= n; i++)
        {
            if (s[i - 1] == 'R')
            {
                q[i] = 1;
            }
            else if (s[i - 1] == 'G')
            {
                q[i] = 2;
            }
            else
            {
                q[i] = 3;
            }
        }
        for(int i=0; i<=3; i++)
        {
            for(int j=0; j<=3; j++)
            {
                dp[i][j]=-1e9;
            }
        }
        dp[0][0]=0;
        for (int i = 1; i <= n; i++)
        {
            memcpy(cp, dp, sizeof cp);


            dp[1][0] = max(dp[1][0], cp[q[i]][q[i]] + 1);
            dp[2][0] = max(dp[2][0], cp[q[i]][q[i]] + 1);
            dp[3][0] = max(dp[3][0], cp[q[i]][q[i]] + 1);
         //   ext[1][0] = ext[2][0] = ext[3][0] = 1;


            for (int j = 1; j <= 3; j++)
            {
                dp[j][q[i]] = max(dp[j][q[i]], cp[j][0]);
            }
            for (int j = 1; j <= 3; j++)
            {
                for (int k = 1; k <= 3; k++)
                {
                    if (k != j && k != q[i] && j != q[i])
                    {
                        for (int u = 1; u <= 3; u++)
                        {
                            for (int v = 1; v <= 3; v++)
                            {
                                dp[u][v] = max(dp[u][v], cp[j][k]);
                                ext[u][v] = 1;
                            }
                        }
                    }
                }
            }
            dp[q[i]][0]=max(dp[q[i]][0],cp[0][0]);
            for (int u = 1; u <= 3; u++)
            {
                for (int v = 1; v <= 3; v++)
                {
                   dp[v][q[i]] = max(dp[v][q[i]], cp[u][v]);
                }
            }
        }
        int res = 0;
        for (int i = 0; i <= 3; i++)
        {
            for (int j = 0; j <= 3; j++)
            {
                res = max(res, dp[i][j]);
            }
        }
        printf("%d\n", res);
    }
}

签到题, 快速幂解决。

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
# define mod 998244353
ll fac[1000000+10],inv[1000000+10];
ll qp(ll base, ll pow)
{
    ll ans=1;
    base%=mod;
    while(pow)
    {
        if(pow&1)
            ans=ans*base%mod;
        base=base*base%mod;
        pow>>=1;
    }
    return ans;
}
ll sum[1000000+10];
void init()
{
    fac[0]=1;
    for(int i=1; i<=1000000; i++)
    {
        fac[i]=fac[i-1]*(ll)i%mod;
    }
    inv[1000000]=qp(fac[1000000],mod-2);

    for(int i=1000000-1;i>=0;i--)
    {
        inv[i]=inv[i+1]*(ll)(i+1)%mod;
    }
}
ll getc(int x,int y)
{
    if(x<y)
        return 0;
    return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
ll sheng[1000000+10],bai[1000000+10];
int main()
{

    int t;
    init();
  //  cout<<fac[100]*inv[100]%mod;
    cin>>t;

    while(t--)
    {
        ll n,m,a,b;
        scanf("%lld%lld%lld%lld",&n,&m,&a,&b);
        ll aa=a*qp(b,mod-2)%mod;

        ll bb=((1-aa)%mod+mod)%mod;

        sheng[1]=aa;
        bai[1]=bb;
        sum[1]=qp(1ll,m);

        sheng[0]=1;
        bai[0]=1;
        for(int i=1; i<=n; i++)
        {
            sum[i]=qp(i,m);
            sum[i]=(sum[i-1]+sum[i])%mod;
            sheng[i]=sheng[i-1]*aa%mod;
            bai[i]=bai[i-1]*bb%mod;

        }
        ll ans=0;

        for(int i=1; i<=n; i++)
        {
            ll now=getc(n,i)*sheng[i]%mod*bai[n-i]%mod;
            now*=sum[i];
            now%=mod;
            ans+=now;
            ans%=mod;

        }
        cout<<ans<<'\n';
    }

    return 0;
}

 

很抽象的题意,说的一点不清楚。大致是每一个根节点要么是重儿子,要么不是。是的话,会形成一条重儿子链,这条重儿子链的顶端的父节点,将这条重儿子链形成的线段树叠在自己头顶,父节点其余的轻儿子,坠在父节点下面。问给定树形成的新树高度。

如果是重儿子,每次返回两个值,一个是当前其接龙的重链长度,一个是该节点下面坠的树高。

如果不是重儿子,则返回两个值,一个是将其重链接在头顶和其下端坠着的树高之和,一个是在接龙的重链长度,此时为0.

记录一个up,只对轻儿子有效, 表示接在其头部的长度,初始必须是1,因为单纯一个数字也是一层。

记录一个down,代表当下面连接的高度,对全部儿子节点取max即可。

#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const int N = 1e6 + 7;
int h[N], e[N], ne[N], idx;
int v[N];
void add(int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
ll res;
typedef pair<int, int> pii;
int maxx(int &a, int &b)
{
    if (a > b)
    {
        return a;
    }
    return b;
}
inline pii dfs(int x)
{
    int up = 1;
    int down = 0;
    int len = v[x];
    int flag=0;
    for (register int i = h[x]; i != -1; i = ne[i])
    {
        int to = e[i];
        if (v[to])
        {
            pii tp = dfs(to);
            up = ceil(log2((tp.second + 1) * 2));
            down = maxx(down, tp.first);
            len += tp.second;
            flag=tp.second+1;
        }
        else
        {
            pii tp = dfs(to);
            down = maxx(down, tp.first);
        }
    }
    if(v[x]==0)
        len=0;
    pii tpp0 = {up + down, len}, tpp1 = {down, len};
    return (v[x] == 0) ? tpp0 : tpp1;
}
inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while (!isdigit(ch))
    {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (isdigit(ch))
    {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

inline void write(ll x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}
int main()
{
    int size(512 << 20);
    // 512M
    __asm__("movq %0, %%rsp\n" ::"r"((char *)malloc(size) + size)); // YOUR CODE
    ios::sync_with_stdio(false);
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        idx = 0;
        int n;
        cin >> n;
        for (register int i = 0; i <= n; i++)
        {
            v[i] = 0;
            h[i] = -1;
        }
        for (register int i = 1; i <= n; i++)
        {
            register int x;
            cin >> x;
            add(x, i);
        }
        for (register int i = 1; i <= n; i++)
        {
            register int x;
            cin >> x;
            if (x)
            {
                v[x] = 1;
            }
        }
        cout << dfs(1).first << '\n';
    }
    exit(0);
}

每条边都有一个开始工作的时间,同时也有一个工作持续的时间,不工作的时候,这条边不联通。问图整体联通的最长时间(可以任意安排每个边的起始工作时间)

图是仙人掌,也就是若干简单环的连接。对于环外的桥,必须从0时刻就开始工作,而一旦这样,就决定了要对所有桥边取min,作为答案的初始值。

对于每一个简单环内部,只需要让其len-1条边工作即可。也就是说,两条边的环,工作时间为w1+w2,三条边的w1<=w2<=w3时,为min(w1+w2,w3)意思就是,先让w1和其他除了w2之外的,工作,再让w2和其他除了w1的工作,如果w3>w1+w2,则完全可以,否则就为w3.于是题目转化为求出仙人掌图的每一个简单环的每一条边。

#include<bits/stdc++.h>
#define ll long long
#define N 100005
using namespace std;

struct edge
{
    int u,v,w,id;
} o[N<<1];

vector<pair<int,int> > e[N];

int dfn[N],low[N],tot;

stack<edge> st;

int ans=2e9;

void tarjan(int x,int f)
{
    dfn[x]=low[x]=++tot;
    for (auto [p,id]:e[x]) if (!dfn[p])
        {
            st.push(o[id]);
            tarjan(p,id);
            low[x]=min(low[x],low[p]);
            if (low[p]==dfn[x])
            {
                edge nw;
                vector<int> g;
                do
                {
                    nw=st.top();
                    st.pop();
                    g.push_back(nw.w);
                }
                while (nw.id!=id);
                sort(g.begin(),g.end());
                if (g.size()==1) ans=min(ans,g[0]);
                else if (g.size()==2) ans=min(ans,g[0]+g[1]);
                else ans=min(ans,min(g[0]+g[1],g[2]));
            }
        }
        else
        {
            if (dfn[x]>dfn[p] && id!=f) st.push(o[id]);
            low[x]=min(low[x],dfn[p]);
        }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin>>T;
    while (T--)
    {
        int n,m,i;
        cin>>n>>m;
        tot=0;
        ans=2e9;
        for (i=1; i<=n; i++) e[i].clear(),dfn[i]=low[i]=0;
        for (i=1; i<=m; i++)
        {
            cin>>o[i].u>>o[i].v>>o[i].w;
            o[i].id=i;
            e[o[i].u].push_back({o[i].v,i});
            e[o[i].v].push_back({o[i].u,i});
        }
        tarjan(1,0);
        cout<<ans<<endl;
    }
}

直接模拟,因为度数之和是1e6级别,故直接模拟,但卡常 

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
# define mod 1000000007
ll fac[1000000+10],inv[1000000+10];
ll qp(ll base, ll pow)
{
    ll ans=1;
    base%=mod;
    while(pow)
    {
        if(pow&1)
            ans=ans*base%mod;
        base=base*base%mod;
        pow>>=1;
    }
    return ans;
}
ll sum[1000000+10];
void init()
{
    fac[0]=1;
    for(int i=1; i<=1000000; i++)
    {
        fac[i]=fac[i-1]*(ll)i%mod;
    }
    inv[1000000]=qp(fac[1000000],mod-2);

    for(int i=1000000-1; i>=0; i--)
    {
        inv[i]=inv[i+1]*(ll)(i+1)%mod;
    }
}
ll getc(int x,int y)
{
    if(x<y)
        return 0;
    return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
int du[1000000+10];
ll ans[1000000+10];
unordered_map<int,int>mp;
inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while (!isdigit(ch))
    {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (isdigit(ch))
    {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

inline void write(ll x)
{
    if (x < 0)
        putchar('-'), x = -x;
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}
int main()
{

    int t;
    cin>>t;
    init();
    while(t--)
    {
        int n,m;
        n=read();
        m=read();
        for(int i=1; i<=n; i++)
        {
            du[i]=0;
            ans[i]=0;
        }
        mp.clear();
        for(int i=1; i<=m; i++)
        {
            int x,y;
            x=read();
            y=read();
            du[x]++;
            du[y]++;
        }
        for(int i=1; i<=n; i++)
        {
            mp[du[i]]++;
        }
        for(auto it:mp)
        {
            for(int j=2; j<=it.first; j++)
            {
                ll temp=(ll)getc(it.first,j)*(ll)it.second%mod;
                ans[j]+=temp;
                ans[j]%=mod;
            }
        }
        ll fuck=0;
        for(int i=2; i<n; i++)
        {
            fuck^=ans[i];
        }
        cout<<fuck<<'\n';
    }
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac安装nvm教程及使用

nvm 是 node 版本管理器&#xff0c;也就是说一个 nvm 可以管理多个 node 版本&#xff08;包含 npm 与 npx&#xff09;&#xff0c;可以方便快捷的安装、切换 不同版本的 node。 1、直接通过brew安装 执行命令&#xff1a;brew install nvm PS&#xff1a; 如果没有安装br…

机器学习笔记:李宏毅diffusion model

1 概念原理 首先sample 一个都是噪声的vector然后经过denoise network 过滤一些杂质接着继续不断denoise&#xff0c;直到最后出来一张清晰图片 【类似于做雕塑&#xff0c;一开始只是一块石头&#xff08;噪声很杂的雕塑&#xff09;&#xff0c;慢慢雕刻出想要的花纹】 同一个…

MySQL修改编码

插入中文乱码,我电脑上没有出现&#xff0c;我只是来记录一下 MySQL版本: 8.0.34Windows 查看编码 mysql中输入下面的命令 show variables like ‘character_%’; 乱码的一般是图片中划红线的部分不是utf8 character_set_database是设置数据库的默认编码的 character_set_ser…

ETLCloud+MaxCompute实现云数据仓库的高效实时同步

MaxCompute介绍 MaxCompute是适用于数据分析场景的企业级SaaS&#xff08;Software as a Service&#xff09;模式云数据仓库&#xff0c;以Serverless架构提供快速、全托管的在线数据仓库服务&#xff0c;消除了传统数据平台在资源扩展性和弹性方面的限制&#xff0c;最小化用…

基于grpc从零开始搭建一个准生产分布式应用(3) - GRPC实现

本章开始会进入GRPC子专题&#xff0c;先实现前面章节中提到的例子。然后就使用的知识点展开全面的描述。本章代码任务&#xff1a;1、实现一个简单的GRPC服务&#xff1b;2、实现GRPC拦截器。 本章的代码承接上一章的代码进行迭代。因模块间存在相互依赖关系&#xff0c;读者一…

【数据结构】二叉树篇| 纲领思路02+刷题

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 所谓自由&#xff0c;不是随心所欲&#xff0c;而是自我主宰。——康德 目录 一、前言二、刷题1、翻转二叉树 2、二叉树的层序遍历✨3、 二…

2023国赛数学建模D题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

【Java】一只小菜坤的编程题之旅【3】

文章目录 1丶判定是否互为字符重排2、杨辉三角3丶某公司的1个面试题&#xff08;字符串包含问题&#xff09; 1丶判定是否互为字符重排 这个题我们用一个非常简单的思想就能实现&#xff0c;我们先将字符串转换为字符数组&#xff0c;然后对字符数组进行排序&#xff0c;然后再…

安卓如何卸载应用

卸载系统应用 首先需要打开手机的开发者选项&#xff0c;启动usb调试。 第二步需要在电脑上安装adb命令&#xff0c;喜欢的话还可以将它加入系统path。如果不知道怎么安装&#xff0c;可以从这里下载免安装版本。 第三步将手机与电脑用数据线连接&#xff0c;注意是数据线&a…

阿里云服务器部署Drupal网站教程基于CentOS系统

阿里云百科分享如何在CentOS 7操作系统的ECS实例上搭建Drupal电子商务网站。Drupal是使用PHP语言编写的开源内容管理框架&#xff08;CMF&#xff09;&#xff0c;它由内容管理系统&#xff08;CMS&#xff09;和PHP开发框架&#xff08;Framework&#xff09;共同构成。它用于…

安装Jenkins

一、什么是Jenkins Jenkins是一个开源软件项目&#xff0c;是基于Java开发的。我们可以利用Jenkins来实现持续集成的功能。 因为Jenkins是基于Java开发的&#xff0c;所以在安装Jenkins之前首先需要安装Java的JDK。 二、安装Jenkins 在Windows平台上面安装Jenkins共有两种方式…

gSpan算法执行步骤详解示例

目录 1. 问题描述2. gSpan算法步骤2.1 数据预处理2.2 深度递归挖掘频繁子图2.2.1 获取所有的频繁边2.2.2 深度递归挖掘频繁子图 参考文献 1. 问题描述 gSpan 是一款图规则挖掘算法&#xff0c;目标是从现有的图集中挖掘频繁子图。如下图中包含三个图&#xff1a; 其中圆圈为顶…

13-把矩阵看作是对系统的描述

探索矩阵乘法&#xff1a;更深刻的理解与应用视角 &#x1f9e9;&#x1f50d; 引言 &#x1f4d6; 在我们进一步探讨矩阵乘法之前&#xff0c;让我们从不同的角度来理解什么是矩阵&#xff0c;以及如何将矩阵视为一个系统。我们之前已经介绍了矩阵的基本概念和运算&#xff…

SpringBoot案例-部门管理-新增

根据页面原型&#xff0c;明确需求 页面原型 需求 阅读接口文档 接口文档链接如下&#xff1a; 【腾讯文档】SpringBoot案例所需文档 https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 前端在输入要新增的部门名称后&#xff0c;会以JSON格式将数据传入至后端&#xf…

idea如何开启远程调试

一&#xff1a;打包需要部署的jar包上传到服务器 二&#xff1a;服务器&#xff08;开启远程调试接口&#xff09; nohup java -jar -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address8453 xxx.jar > xxx.log 2>&1 & 三&#xff1a; idea配置rem…

电脑开机出现Boot Device怎么办?

开机出现Boot Device这个问题很常见&#xff0c;有时还会出现No Boot Device的问题&#xff0c;虽然多了一个单词&#xff0c;但意思是相同的&#xff0c;这些问题说明你的系统盘出现了问题&#xff0c;或者是引导出现了问题。这该如何解决呢&#xff1f; 方法1. 检查主板或硬盘…

如何定位线上CPU飙高的问题

1.问题情景 我们的接口卡死&#xff0c;CPU飙高到打不开的网页 2.问题定位 2.1 top指令 通过top命令找到CPU耗用最厉害的那个进程的PID 直接输入top Linux下的100%代表一个核心&#xff0c;如果是八核&#xff0c;最高可以到800%&#xff0c;这样才算满 然后通过PID找到CP…

Redis原理简述

Redis原理简述 Redis 有哪些特性 1. 特性 key-value 型内存数据库单线程——原子化操作支持lua脚本发布与订阅可持久化逐出与过期……2. 持久化 RDB:经过压缩的二进制文件;fork子进程进行操作AOF:保存所有写命令;先写缓存再同步至AOF文件;文件过大时会触发AOF重写3. 过期…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能&#xff08;WAI-ARIA、第 508 节/WCAG 合规性&#xff09;、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

深入了解 Vue 3 组件间通信机制

什么是组件&#xff1f; 在 Vue3 中&#xff0c;组件是构建应用界面的核心概念之一。组件可以看作是可复用、自包含和可组合的代码块&#xff0c;用于封装 UI 元素和相应的行为逻辑。 通俗来说就是&#xff0c;组件&#xff08;Component&#xff09;是一种对数据和方法的简单…