hihocoder 1166 交换代数|HDU 4870 Rating 等(区间翻转,高斯消元求期望)

SDUT3173 有多少个连续子序列的和能被k整除 题目描述 Edward 得到了一个长度为 N 的整数序列,他想找出这里面有多少个“幸运的”连续子序列。一个连续子序列被称为“幸运的”,当且仅当该子序列内的整数之和恰好是 K 的整数倍数。他请求你写一个程序来计算他喜欢的连续子序列个数。 输入  输入第一行是一个整数 T,表示有 T 组数据。 每组数据第一行是两个整数 N (1 接下来的一行包含 N 个整数 A i (|A 阅读详情

少女幽香这几天正在学习交换代数,然而她什么也没有学会,非常痛苦。于是她开始玩起了一个简单的小游戏,来放松一下。
地面上一共有n个球,一开始有一些是黑色的,有一些是白色的。每次她随机选择一个区间(一共有n(n+1)/2个区间,每个区间有相等的概率被选择),把这个区间的颜色反转,即将该区间中白球变黑球,黑球变白球。
现在她想要知道期望情况下,多少次反转能够使得整个区间都是白色的。

输入

第一行n (1 <= n <= 20),表示球的数量。
接下来一行n个数,表示这些球的颜色,0表示白色,1表示黑色。

输出

一行一个实数,表示答案。你的答案与标准答案的绝对误差在10-4以内就算正确。

样例输入
2
0 1
样例输出
3.000000
http://hihocoder.com/problemset/problem/1166
看了5天终于看懂了……题解:

http://media.hihocoder.com/contests/challenge11/hihoCoderChallenge11SolutionsB-D.pdf

#include<iostream>  
#include<algorithm>  
#include<string>  
#include<map>  
#include<vector>  
#include<cmath>  
#include<queue>  
#include<string.h>  
#include<stdlib.h>  
#include<stdio.h>
#define ll long long  
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
typedef double LD;
int n,b[30],c,cnt;
LD g[30][30];
/* 
void gauss(int n){  //① 
	rep(i,0,n) {
		int p=i;
		rep(j,i+1,n) if (fabs(g[j][i])>=fabs(g[p][i])) p=j;
		rep(j,i,n+1) swap(g[i][j],g[p][j]);
		if (fabs(g[i][i])<=1e-9) continue;
		rep(k,i+1,n+1) g[i][k]/=g[i][i]; g[i][i]=1;
		rep(j,i+1,n) {
			LD cof=-g[j][i];
			rep(k,i,n+1) g[j][k]+=cof*g[i][k];
		}
	}
	per(i,0,n) {
		rep(j,0,i) g[j][n]-=g[j][i]*g[i][n];
	}
}
void gauss() {    //② 
	int already = 0;
	for(int i = 0; i < n; i++) {
		int no = already;
		for(int j = already; j < n; j++) if(fabs(g[j][i]) > fabs(g[no][i]))
			no = j;
		if(fabs(g[no][i]) ==0 ) continue;
		for(int j = 0; j <= n; j++)
			swap(g[no][j], g[already][j]);
		for(int j = 0; j < n; j++) if(j != already){
			double flag = g[j][i] / g[already][i];
			for(int k = 0; k <= n; k++)
				g[j][k] -= g[already][k] * flag;
		}
		already++;
	}
}
*/
void gauss(int n){   //③ 
	int r;
	for(int i=0;i<n;++i){
		r=i;
		for(int j=i+1;j<n;++j)
			if(fabs(g[j][i])>fabs(g[r][i])) r=j;
		if(fabs(g[r][i]==0)) continue;
		if(r!=i){
			for(int j=0;j<=n;++j)
				swap(g[r][j],g[i][j]);
		}
/*
		根据精度需要选择以下其一:
        低精度
        for (k = i + 1; k < n; k++) {
            r = a[k][i] / a[i][j];
            for (j = i; j <= n; j++)
                a[k][j] -= r * a[i][j];
        }
		高精度
*/
		for(int j=n;j>=i;--j){
			for(int k=i+1;k<n;++k)
				g[k][j]-=g[k][i]/g[i][i]*g[i][j];
		}
	}
	for(int i=n-1;i>=0;--i){
		for(int j=i+1;j<cnt;++j)
			g[i][cnt]-=g[j][cnt]*g[i][j];
		g[i][cnt]/=g[i][i];
	}
}
int main() {
	scanf("%d",&n);
	g[0][0]=1;
	int p=(n+1)/2+1; //必须+1,,这是规定好的 
	for (int i=2;i<=n+1;i+=2) {
		g[i/2][i/2]=1; //不能少 
		g[i/2][i/2-1]-=1.*i*(i-1)/n/(n+1);  //表示1的个数从i个变成了i-2个,i*(i-1)/2表示从i个1里面选两个(2和后面约掉了) 
		g[i/2][i/2]-=2.*i*(n+1-i)/n/(n+1);  //一个0变1,一个1变0,可能性有i*(n+1-i),n*(n+1)/2表示从n+1位里选两位 
		g[i/2][i/2+1]-=1.*(n+1-i)*(n-i)/n/(n+1); //原本应该是g[i][i+2],但因为数字的下标必须是连续的,从n+1-i个0里面选两个
		g[i/2][p]=1; //不能少 
	}
	rep(i,1,n+1) scanf("%d",&b[i]);
	rep(i,1,n+2) c+=b[i]!=b[i-1]; //计算有几个1 (肯定是偶数,这也是上面为什么能写成/2)
	n=p;
	cnt=n;
	gauss(n);
//	printf("%.10f\n",(double)g[c/2][p]/g[c/2][c/2]); // ②用这个 
	printf("%.10f\n",(double)g[c/2][p]); //①和③用这个 
	return 0;
}

题意:对于某项比赛,取得前200名,他的分数将为min(x+50,1000),反之为max(x-100,0).现在,一个人参加该项比赛,他取得前200名的概率为P。他拥有两个账号,每个账号的初始分数为0,。每次比赛他拿分数最少的账号参加比赛。求他参加比赛场数的期望,使其中的一个账号到达1000分。

思路:期望问题,我们这里利用高斯消元来求期望。

            设他当前两个账号的分数分别为i,j,设dp[i][j]表示分数为i,j时到达目标时期望的比赛场数。则dp[i][j] = p * dp[i][j+50]+(1-p) * dp[i][j-100]+1.且dp[20][19] = 0;

            变形可得:dp[i][j] - p * dp[i][j+50] - (1-p) * dp[i][j-100] = 1.0

            如果我们把50看成单位分数的话,这样会出现210个变量,可以利用高斯消元来求解。 (转)

http://acm.hdu.edu.cn/showproblem.php?pid=4870

#include<iostream>  
#include<algorithm>  
#include<string>  
#include<map>  
#include<vector>  
#include<cmath>  
#include<queue>  
#include<string.h>  
#include<stdlib.h>  
#include<stdio.h>
#define ll long long  
using namespace std;
const int MAX = 21;
const int MAXN = 500;
const double EPS = 1e-6;
int idx[MAX][MAX];
double a[MAXN][MAXN];
//a is a matrix , l is represent free variable, ans store the answer
double gauss(int N) {
    int n = N;
    for (int i = 0; i < n; i++) {
        int r;
        for (r = i; r < n; r++)
            if (fabs(a[r][i]) >= EPS)
                break;
        if (r == n) continue;
        for (int j = 0; j <= n; j++) swap(a[i][j], a[r][j]);
        for (int j = n; j > i; j--) a[i][j] /= a[i][i];
        a[i][i] = 1.0;
        for (int j = 0; j < n; j++) {
            if (i == j) continue;
            if (fabs(a[j][i]) >= EPS) {
                for (int k = n; k > i; k--)
                    a[j][k] -= a[j][i] * a[i][k];
                a[j][i] = 0.0;
            }
        }
    }
    return a[idx[0][0]][N];
}
int main(void){
    int cnt = -1;
    for(int i = 0; i <= 20; ++i)
        for(int j = 0; j <= i; ++j)
            idx[i][j] = ++cnt;
    cnt=cnt+1;
    double P;
    while(~scanf("%lf",&P)){
        memset(a,0,sizeof(a));
        for(int i = 0; i < 20; ++i){  //注意这里没有等号(i=20已经完成任务了,不需要再计算)
            for(int j = 0; j < i; ++j){ //j比i小时,选j参加比赛 
                a[idx[i][j]][cnt] = 1.0;
                a[idx[i][j]][idx[i][j]] = 1.0;
                a[idx[i][j]][idx[i][j+1]] -= P;  //+50/50=+1  从i分j分变成i分j+1分的概率
                a[idx[i][j]][idx[i][max(j-2,0)]] -= 1.0 - P; //-100/50=-2,注意max(i-2,0) 
            }
            a[idx[i][i]][cnt] = 1.0;   //j==i是个特殊情况,如果赢了,i+1,输了,j-2(始终要保证i>=j) 
            a[idx[i][i]][idx[i][i]] = 1.0;
            a[idx[i][i]][idx[i+1][i]] -= P;
            a[idx[i][i]][idx[i][max(i-2,0)]] -= 1.0 - P;
        }
        printf("%f\n",gauss(cnt));
    }
    return 0;
}

2、用dp

首先离散化,因为每场比赛分数的变化都是50的倍数,令每场赢了得1分,输了扣2分。

dp[i]表示单场比赛从i分数提高到i+1的分数的期望值,

则有:dp[i]=p+(1-p)(dp[i-2]+dp[i-1]+dp[i]+1)  

 ==>dp[i]=1/p+(1-p)/p*(dp[i-2]+dp[i-1]);dp[0]=1/p,dp[1]=1/p/p;

用ans[i][i]表示两个账号分数从0打到ii的期望,对于账号分数的上升,他们是交错上升的,意思是当他们分数一样的时候,前面的赢一分,当前面的赢了一分之后,下一场就后面的赢,所以只需要维护ans[i+1][i] 和ans[i+1][i+1],且

ans[i+1][i]=ans[i][i]+dp[i],ans[i+1][i+1]=ans[i+1][i]+dp[i],

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>  
  2. #include <cmath>  
  3. #include <stdio.h>  
  4. using namespace std;  
  5. double dp[22];  
  6. double ans[22][22];  
  7.   
  8. int main()  
  9. {  
  10.     double p;  
  11.     while (cin>>p)  
  12.     {  
  13.         dp[0]=1/p;  
  14.         dp[1]=1/p/p;  
  15.         for(int i=2;i<20;++i)  
  16.             dp[i] = 1+(1-p)/p*(dp[i-2]+dp[i-1]+1);   
  17.         ans[0][0]=0;  
  18.         for (int i=0;i<20;++i)  
  19.         {  
  20.             ans[i+1][i]=ans[i][i]+dp[i];  
  21.             ans[i+1][i+1]=ans[i+1][i]+dp[i];  
  22.         }  
  23.         printf("%.6lf\n",ans[20][19]);  
  24.     }  
  25. }  
更简单的方法: (转)

先考虑只注册一个帐号的情况(求的是初始e[0],即0到20的期望,有e[20]=0)

e[0] = p*e[1]+(1-p)*e[0] +1  ==>   e[0] = e[1] +1/p

e[1] = p*e[2]+(1-p)*e[0] +1  ==>   e[0] = e[2] +1/p+1/(p*p)

e[2] = p*e[3]+(1-p)*e[0] +1

e[n-1] = p*e[n]+(1-p)*e[n-3]+1

e[n] = 0

显然,可以知道,e[0] = e[k] + t[k]。(因为每一次代入后,e[0]跟e[k]都会是乘上系数p)

代入一般情况下的,e[k] = p*e[k+1]+(1-p)*e[k-2]+1,-t[k] = p*(-t[k+1])+(1-p)*(-t[k-2])+1

所以有了t[0]=0,t[1]=1/p,t[2]=1/(p*p)以及t[k],t[k+1],t[k-2]的关系,可以求出所有t[i]

而2个帐号的时候,由于每次取rating小的参赛,必然是这样的结果(0,0)=>(1,0)=>(1,1)=>(2,1)=>....=>(19,19)=>(20,19)

而t[k]表示的是一个帐号从0到达k的期望时间,所以答案上t[20]+t[19]。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

int main(){
    double p,t[22];
    while(~scanf("%lf",&p)){
        t[0]=0,t[1]=1./p,t[2]=1./p+1./(p*p);
        for(int i=3;i<=20;++i) t[i] = (1./p+1./p*t[i-1]-(1-p)/p*t[i-3]);
        printf("%.6lf\n",t[19]+t[20]);
    }
    return 0;
}

附加转载的两题:

http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1423

题解:http://www.cnblogs.com/keanuyaoo/archive/2013/09/04/3301559.html

Description: (转)

由于山体滑坡,DK被困在了地下蜘蛛王国迷宫。为了抢在DH之前来到TFT,DK必须尽快走出此迷宫。此迷宫仅有一个出口,而由于大BOSS的力量减弱影响到了DK,使DK的记忆力严重下降,他甚至无法记得他上一步做了什么。所以他只能每次等概率随机的选取一个方向走。当然他不会选取周围有障碍的地方走。如DK周围只有两处空地,则每个都有1/2的概率。现在要求他平均要走多少步可以走出此迷宫。

Input:

先是一行两个整数N, M(1<=N, M<=10)表示迷宫为N*M大小,然后是N行,每行M个字符,'.'表示是空地,'E’表示出口,'D’表示DK,'X’表示障碍。      

Output:

如果DK无法走出或要超过1000000步才能走出,输出tragedy!,否则输出一个实数表示平均情况下DK要走几步可以走出迷宫,四舍五入到小数点后两位。

Sample Input:

1 2
ED
3 3
D.X
.X.
X.E

Sample Output:

1.00
tragedy!

首先对地图节点重新标号。
假设E[i]表示DK从i点开始走出迷宫的期望值。那么E[i]=(E[a1]+E[a2]+E[a3]+...+E[an])/n+1,其中a1...an是i的相邻节点。
那么对于每一个DK可达的节点来说,都可以为它建立这样的一个方程。
现在假设DK可达的点有N个,那么我们最终将会得到N元一次方程组。最后利用高斯消元解出E[No[S]]。其中S是DK的起点,No[S]是重标号后的起点
这里要重点注意的是,我们联立方程的时候,一定要注意DK可达这个条件,不然就会导致无解的情况。
#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 800

double mat[MAXN][MAXN];
char map[40][40];
int num[40][40];

struct node
{
    int x;
    int y;
};
node Star,end;
int n,m,len;
int di[4][2]={1,0,0,1,-1,0,0,-1};
int cut;

int isok(int x,int y)
{
    return x >= 0 && x < n && y >= 0 && y < m && map[x][y]!='X';
}

node queue[2*MAXN];
int head,tail;

void fillnum(int x,int y) //对地图进行重新标号,标号从0开始
{
    num[x][y]=++cut;
    tail=head=0;
    node e,q;
    e.x=x;e.y=y;
    queue[tail++]=e;
    while(head<tail)
    {
        e=queue[head++];
        for(int i=0;i<4;i++)
        {
            q.x=e.x+di[i][0];
            q.y=e.y+di[i][1];
            if(isok(q.x,q.y) && num[q.x][q.y]==-1)
            {
                num[q.x][q.y]=++cut;
                queue[tail++]=q;
            }
        }
    }
}

bool gauss(int n) 
{ 
    int i, j, row, idx; 
    double buf, maxx; 
    for(row = 0; row < n; row ++) 
    { 
        for(maxx = 0, i = row; i < n; i ++)
        { 
            if(maxx < fabs(mat[i][row])) 
            { 
                maxx = fabs(mat[i][row]); 
                idx = i; 
            } 
        } 
        if(maxx == 0)
            continue;
        if(idx != row) 
        { 
            for(i = row; i <= n; i ++) 
                swap(mat[row][i], mat[idx][i]); 
        } 
        for(i = row + 1; i < n; i ++)
        { 
            if(fabs(mat[i][row])<1e-8)
                continue;
            buf = mat[i][row] / mat[row][row]; 
            for(j = row; j <= n; j ++) 
                mat[i][j] -= buf * mat[row][j]; 
        } 
    } 
    for(i = n - 1; i >= 0; i --) 
    { 
        for(j = i + 1; j < n; j ++) 
            mat[i][n] -= mat[i][j] * mat[j][j]; 
        mat[i][i] = mat[i][n] / mat[i][i]; 
    } 
    return true; 
} 

int main()
{
    int i,j,k,x,y;
    freopen("D:\\in.txt","r",stdin);
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        len=0;
        for(i=0;i<n;i++)
        {
            scanf("%s",map[i]);
            for(j=0;j<m;j++)
            {
                if(map[i][j]=='D')
                {
                    Star.x=i;
                    Star.y=j;
                }
                else if(map[i][j]=='E')
                {
                    end.x=i;
                    end.y=j;
                }
            }
        }
        memset(num,255,sizeof(num));
        cut=-1;
        fillnum(Star.x,Star.y);
        if(num[end.x][end.y]==-1)
        {
            printf("tragedy!\n");
            continue;
        }
        memset(mat,0,sizeof(mat));
        for(i=0;i<n;i++)  //建立N元一次方程组
        {
            for(j=0;j<m;j++)
            {
                if(num[i][j]!=-1)
                {
                    int now=num[i][j];
                    int count=0;
                    for(k=0;k<4;k++)
                    {
                        x=i+di[k][0];y=j+di[k][1];
                        if(isok(x,y))
                        {
                            mat[now][num[x][y]]=-1;
                            count++;
                        }
                        mat[now][now]=count;
                        mat[now][cut+1]=count;
                    }
                }
            }
        }
        x=num[end.x][end.y];
        memset(mat[x],0,sizeof(mat[x]));
        mat[x][x]=1;
        if(gauss(cut+1))
        {
            if(mat[num[Star.x][Star.y]][num[Star.x][Star.y]]<=1000000)
                printf("%0.2lf\n",mat[num[Star.x][Star.y]][num[Star.x][Star.y]]);
            else
                printf("tragedy!\n");
        }
        else
        {
            printf("tragedy!\n");
        }
    }
    return 0;
}

http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1317

Description:(转)

m个人位于正m边形的顶点上,彼此抛掷飞盘。他们共有两个飞盘,且开始时这两个飞盘位于相距为n的两个人的手中(相邻两个人相距为1,依此类推)。在每次抛掷时两个飞盘被同时抛出,飞盘都以1/2的概率被抛到掷飞盘的人左边相邻的人,1/2的概率被抛到右边相邻的人。此过程一直进行,直到两个飞盘被掷到同一个人手中,求此抛掷飞盘的游戏平均情况下(期望)会在抛掷几次后结束。

Input:

每行有两个整数m (2<m<=100),n (0 < n < m)。

 

这题我们以两个飞盘的距离为状态进行转移。

那么E[n]=E[n+2]/4+E[n-2]/4+E[n]/2+1,化简成:2E[n]-E[n+2]-E[n-2]=4。

首先对于两个飞盘给定的起始距离n,我们可以先搜索一下可否到达状态0,如果不行,则直接输出INF。在搜索的过程中,顺便把重新标号也进行了。为什么这题也要重新标号呢?

因为该题中,假设m是偶数,那么对于任意的n,n+1和n-1都是不可达的状态。请一定记得,如果方程组中有不可达的点的话,就会导致无解的情况!

接下来对每一个可达的状态建立一个如上的方程,最后用高斯消元法解除E[No[n]]即可!

 

复制代码
  1 #include<iostream>
  2 #include<string>
  3 #include<cmath>
  4 #include<stdio.h>
  5 #include<memory.h>
  6 #include<algorithm>
  7 using namespace std;
  8 #define maxn 200
  9 
 10 double mat[maxn][maxn];
 11 int num[maxn];
 12 int n,m;
 13 int cut;
 14 
 15 int getnum(int x) //获取x的状态,对于一个环来说,x和m-x是一样的,我们取小的
 16 {
 17     if(x<0)
 18         x=-x;
 19     if(x>n/2)
 20         x=n-x;
 21     return x;
 22 }
 23 
 24 void dfs(int x) //重标号
 25 {
 26     num[x]=cut++;
 27     int y=getnum(x+2);
 28     if(num[y]==-1)
 29         dfs(y);
 30     y=getnum(x-2);
 31     if(num[y]==-1)
 32         dfs(y);
 33 }
 34 
 35 bool gauss(int n) 
 36 { 
 37     int i, j, row, idx; 
 38     double buf, maxx; 
 39     for(row = 0; row < n; row ++) 
 40     { 
 41         for(maxx = 0, i = row; i < n; i ++)
 42         { 
 43             if(maxx < fabs(mat[i][row])) 
 44             { 
 45                 maxx = fabs(mat[i][row]); 
 46                 idx = i; 
 47             } 
 48         } 
 49         if(maxx == 0) return false; 
 50         if(idx != row) 
 51         { 
 52             for(i = row; i <= n; i ++) 
 53                 swap(mat[row][i], mat[idx][i]); 
 54         } 
 55         for(i = row + 1; i < n; i ++)
 56         { 
 57             buf = mat[i][row] / mat[row][row]; 
 58             for(j = row; j <= n; j ++) 
 59                 mat[i][j] -= buf * mat[row][j]; 
 60         } 
 61     } 
 62     for(i = n - 1; i >= 0; i --) 
 63     { 
 64         for(j = i + 1; j < n; j ++) 
 65             mat[i][n] -= mat[i][j] * mat[j][j]; 
 66         mat[i][i] = mat[i][n] / mat[i][i]; 
 67     } 
 68     return true; 
 69 } 
 70 
 71 int main()
 72 {
 73     int i,len;
 74     freopen("D:\\in.txt","r",stdin);
 75     while(scanf("%d%d",&n,&m)==2)
 76     {
 77         memset(num,255,sizeof(num));
 78         if(m>n/2)
 79             m=n-m;
 80         cut=0;
 81         dfs(m);
 82 //         for(i=0;i<=n/2;i++)
 83 //             cout<<num[i]<<" ";
 84 //         cout<<endl;
 85         if(num[0]==-1)
 86         {
 87             printf("INF\n");
 88             continue;
 89         }
 90         memset(mat,0,sizeof(mat));
 91         len=n/2;
 92         int now,j;
 93         for(i=0;i<=len;i++)
 94         {
 95             if(num[i]!=-1)
 96             {
 97                 now=num[i];
 98                 mat[now][now]=2;
 99                 mat[now][cut]=4;
100                 j=getnum(i-2);
101                 mat[now][num[j]]-=1;
102                 j=getnum(i+2);
103                 mat[now][num[j]]-=1;
104             }
105         }
106         j=num[0];
107         memset(mat[j],0,sizeof(mat[j]));
108         mat[j][j]=1;
115         if(gauss(cut))
116         {
117             printf("%0.2lf\n",mat[num[m]][num[m]]);
118         }
119         else
120         {
121             printf("INF\n");
122         }
123     }
124     return 0;
125 }
复制代码

每次可以从里面拿出一个放在最前(或最后),求最小的次数把数列排好序 每次可以从里面拿出一个放在最前或最后,求最小的次数把数列排好序 http://codeforces.com/problemset/problem/606/C #include #define ll long long using namespace std; int x[100005]; int main(){ int n,a,maxx=0; cin>>n; for(int i= 阅读详情

相关推荐

【经典】有K张折扣券和m元最多能买多少物品(折前价ai,折后价bi)

这真是很玄学的一道题,贪心也要贪好几次。。。 题解:http://blog.youkuaiyun.com/snowy_smile/article/details/50774455 题解:http://blog.youkuaiyun.com/imwutianqi/article/details/50895167 #include #define ll long long using namespace std; st

芒果街上的小屋(此博客暂时停用) 1597

hihoCoder 1166 交换代数 (高斯消元,概率)

题意: 给出区间[1,n]的状态,有0、1.现在每次可以选择任意区间取翻转,问全部翻转成0的次数期望。总共有n(n+1)/2个区间。 题解: 这个CLJ链接将的很清楚了。 那么根据高斯消元列方程求解,因为有-2,+2,那么可以部除以2,这样就变成-1,+1. #include #include #include #include #include #include #include #i

ACM之梦 1191

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1076

hihocoder 1166 期望dp+高斯消元

#1166 : 交换代数 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 少女幽香这几天正在学习交换代数,然而她什么也没有学会,非常痛苦。于是她开始玩起了一个简单的小游戏,来放松一下。 地面上一共有n个球,一开始有一些是黑色的,有一些是白色的。每次她随机选择一个区间(一共有n(n+1)/2个区间,每个区间有相等的概率被选

hero_ds的专栏 717

毕业论文管理系统的设计与实现

毕业论文工作是高等学校本科培养阶段的一个重要环节。目前论文管理工作存在着许多问题,例如人工管理极为不便;学生对论文所要撰写的内容并不十分了解,与指导老师的沟通非常不便;老师的指导监督也很难完全到位;手工评审的效率低等。而现有的一些毕业论文信息管理或答辩评审系统只是实现了部分网上交流和评审管理的功能,在答辩评审的自测和项目指标权重等方面都存在着一定的不足。因此,本文设计的毕业论文管理系统采用B/S模式开发。其中,Browser层使用JSP技术开发;

wqq_992250277的博客 3183

SAM2与Docker的完美组合:5分钟搞定Linux环境下的图像分割部署

本文详细介绍了如何在Linux环境下通过Docker快速部署SAM2图像分割模型,解决安装过程中的常见问题。文章提供了从镜像选择、CUDA版本匹配到容器构建的全流程指南,特别针对GPU加速环境下的'cudnn_frontend: No execution plans support the graph'等报错提供了实用解决方案,帮助开发者在5分钟内完成高效部署。

fern8的博客 933

SpringBoot多线程查询实战-查询库中所有数据多线程实现

但是,在数据量较大且服务器资源足够的情况下,多线程方法通常能够显著提高查询效率。此外,由于它是同步执行的,没有利用并行处理的能力,所以在处理大量数据时可能会比较慢。这个方法采用了分页查询的方式,每次只获取一部分数据,从而避免了内存溢出的问题。然而,它也是同步执行的,没有利用多线程或并行处理的能力。如果每次分页查询的数据量仍然很大,或者需要查询的轮数很多,那么这种方法的效率可能仍然会受到限制。​ ​ ​在比较这三种方式的效率时,我们需要考虑几个关键因素:数据量的大小、查询操作的复杂性、以及并行处理的能力。

勇敢牛牛,不怕困难! 4809

【hihocoder 1554】最短的 Nore0061

【链接】http://hihocoder.com/problemset/problem/1554 【题意】 中文题 【题解】 DP; 设f[i][j][k]表示前i个字符,第一个串已经得到了前j个字符,第二个串已经得到了前k个字符的最少需要字符串长度. 如果想坚持f[i-1][j][k]的[j][k]状态的话,就必须在第i个字符继续坚持,也即再加上一个字符. 或者你...

160

Xilinx Vitis arm-xilinx-eabi-gcc.exe: error: *.c: Invalid argument

This problem may be a bugof version 2021.1 only. Unfortunately, I'm just currently using this version. After Build Project: Find where this Makefile is through "make: Leaving directory" information. For me, it is located atZynq_CPU_wrapper_hw_platfo...

Ayka的博客 6662

4、LTE无人机认证:保障通信安全的新方案

本文针对LTE网络中无人机通信存在的安全风险,提出了一种基于可信第三方GCS的新型认证协议。该协议通过非对称加密和哈希函数保护IMSI等敏感信息,防止身份泄露、中间人攻击、拒绝服务攻击和位置追踪等威胁。利用Scyther工具对协议进行形式化分析,验证了其在机密性、一致性和活性等方面的安全属性,证明该方案能有效提升无人机在LTE网络中的通信安全性与隐私保护能力。

pink的博客 61

Hihocoder的一些dp

Hihocoder P1110 正则表达式 一道区间dp。。。 总之比较基础吧,不要想太多,直接按照题目说的做就好了。  1:0是正则表达式,1也是正则表达式。  2:P和Q都是正则表达式,则PQ是正则表达式。  3:P是正则表达式,则(P)是正则表达式  4:P是正则表达式,则P*也是正则表达式  5:P和Q都是正则表达式,则P|Q是正则表达式。 2,3,4,5用区间dp有着明显...

Mmm040403的专栏 280

K8S搭建(centos)四、安装K8S

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2650

HDU 4870 Rating(高斯消元)

HDU 4870 Rating 题目链接 题意:一个人注册两个账号,初始rating都是0,他每次拿低分的那个号去打比赛,赢了加50分,输了扣100分,胜率为p,他会打到直到一个号有1000分为止,问比赛场次的期望 思路:f(i, j)表示i >= j,第一个号i分,第二个号j分时候,达到目标的期望,那么可以列出转移为f(i, j) = p f(i', j') + (1 - p)

Remilia's 1991

金融行业大数据可视化:实时监控与风险预警系统构建

随着金融业务数字化转型,日均产生的交易数据、市场数据、客户行为数据呈指数级增长(单家银行日交易数据量可达TB级)。数据实时性不足(分钟级延迟难以应对高频交易风险)风险特征挖掘浅层(仅基于规则引擎,漏报率高达30%+)可视化分析能力薄弱(静态报表无法支持动态决策)本文聚焦构建具备毫秒级数据响应智能风险建模交互式可视化决策能力的新一代系统,覆盖数据采集、实时处理、多维可视化、智能预警四大核心模块,适用于银行、证券、保险等金融细分领域。章节核心内容技术亮点核心概念可视化系统架构/数据流模型。

AI天才研究院 1523

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

小L打CF

Description 小L小 L小L 有 nnn 个 CFCFCF 号,每场比赛他会使用一个账号,会得到一个 PerformancePerformancePerformance ,假设原 RatingRatingRating 为 xxx, PerformancePerformancePerformance 为 yyy ,则 RatingRatingRating 变为 (x+y)/2(x+y)/2(x+y)/2 ​。 小L小 L小L 会贪心地选择自己每一次使用的号,使得 每场之后 CFRatingCF Ra

orz 264

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

交换代数笔记1|Atiyah,Chpt.1

转载于:https://www.cnblogs.com/MathematicalCat/p/9404067.html

bakai7787的博客 495

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复习交换代数——准素分解

众所周知,最近我在学习代数几何,最近可能会把之前没搞懂的交换代数认真复习一下。这次的主题是准素分解。朴素的操作可见Atiyah经典的书,但是我们拒绝采用这种没有动机而又不清晰的过程。 首先我们熟知的一个交换代数结果是 定理 对于Nother环$R$,有限生成模$M$,那么存在合成列$$0=M_0\subseteq M_1\subseteq \ldots \subseteq M_{n-1}\...

weixin_30471065的博客 1028

hznu 1524 排队买票(dp)【类卡特兰构造】

有M个小孩到公园玩,门票是1元。其中N个小孩带的钱为1元,K个小孩带的钱为2元。售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱。注意:两个拿一元零钱的小孩,他们的位置互换,也算是一种新的排法。(M&lt;=10)输入输入一行,M,N,K(其中M=N+K,M&lt;=10)。输出输出一行,总的排队方案。样例输入4 2 2样例输出8http://hsacm.cn/JudgeOn...

芒果街上的小屋(此博客暂时停用) 2944

poj1426 Find The Multiple(哈夫曼思想)

Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there

芒果街上的小屋(此博客暂时停用) 2083

在O(logn)时间内找到数组中离每个数最近而又比它大的数的下标

题目描述   Farmer Zhao's N cows (1 ≤ N ≤ 1,000,000) are lined up in a row. So each cow can see the nearest cow which is taller than it. You task is simple, given the height (0 9) of each cow lined up i

芒果街上的小屋(此博客暂时停用) 1880

是否可以删除一个字母之后变成回文串

题目描述 给出一个字符串,仅由小写字母组成。请找出是否仅删除其中的一个字母之后, 字符串变成回文串。 输入 输入第一行是一个整数 T,表示有 T 组数据。 每组数据占一行,每行包含一个非空字符串,字符串长度不超过 105 。   输出 对于每组测试数据,输出一行包含一个整数 K ,表示删除字符串中第 K 个字 

芒果街上的小屋(此博客暂时停用) 1786

从n到m,有-1和*2两种操作。问最少走几步

从n到m,有-1和*2两种操作。问最少走几步。 这题必须从m来逆向考虑。 #include using namespace std; int main(){ int count =0; int m,n; cin>>n>>m; while(n < m){ if(m%2) m++; else m/=2; count++; } cout<<count+n-m<

芒果街上的小屋(此博客暂时停用) 1735

CF 549H. Degenerate Matrix(二分,退化矩阵灵活题)

The determinant of a matrix 2 × 2 is defined as follows: A matrix is called degenerate if its determinant is equal to zero. The norm ||A|| of a matrix A is defined as a maximum of absolute v

芒果街上的小屋(此博客暂时停用) 1711

CF629C 在s两端在加两个串p和q 使得总长度为n,并且最后的s'符合规范的方法

给你一个长度为m的只含()的括号串s, 要求在s两端在加两个串p和q, 使得总长度为n,并且最后的s'(即p+s+q)是符合规范的。求添加p、q的方法数 可以在现有思路上+点击打开链接这题二维代码的理解。 还有一种做法:点击打开链接

芒果街上的小屋(此博客暂时停用) 1544

【codechef】一维王国问题(最少需要几颗炸弹)

N one dimensional kingdoms are represented as intervals of the form [ai , bi] on the real line. A kingdom of the form [L, R] can be destroyed completely by placing a bomb at a point x on the real lin

芒果街上的小屋(此博客暂时停用) 1531
上一篇: hdu 4734 F(x)(数位dp,记忆化深搜,灵活题)
下一篇: 坑。。待填
ccyy-
博客等级 码龄12年 31粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值