进阶训练赛(十二)

2023-05-16

目录

问题 A: 符文宗师的魔方阵

问题 B: APP的成绩单

问题 C: 6.1.4.1 最大的节点

问题 D: 6.2.2.1 油田

问题 E: 6.3.2.1 电话网络

问题 F: 7.1.4.1 重型运输

问题 G: 打怪兽version-3

问题 H: 2.4.1 间谍

问题 I: 2.4.2 Web导航

问题 J: 2.4.3 骑士移动

问题 L: 吃菜

问题 M: 矩形


问题 A: 符文宗师的魔方阵

输入的时候记录一下每行每列有多少个-1,行数>-1的个数,可以遍历一遍,找到没有-1的那行计算出矩阵每行或每列的和,之后遍历一遍数组计算即可。

int tx[10],ty[10];//记录每行每列-1的个数
void solve()
{
    int a[10][10];
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            cin>>a[i][j];
            if(a[i][j]==-1) tx[i]++,ty[j]++;
        }
    }
    int sum = 0;
    for(int i=1;i<=5;i++){
        if(tx[i]==0){
            for(int k=1;k<=5;k++) sum+=a[i][k];
            break; 
        }
    }

    //cout<<sum<<endl;
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            if(a[i][j]==-1){
                int temp;
                if(tx[i]==1){
                    temp = 0;
                    for(int k=1;k<=5;k++){
                        if(a[i][k]!=-1) temp+=a[i][k];
                    }
                    a[i][j] = sum-temp;
                    tx[i]--,ty[j]--;
                }else if(ty[j]==1){
                    temp = 0;
                    for(int k=1;k<=5;k++){
                        if(a[k][j]!=-1) temp+=a[k][j];
                    }
                    a[i][j] = sum-temp;
                    tx[i]--,ty[j]--;
                }
            }
        }
        for(int j=5;j>=1;j--){
            if(a[i][j]==-1){
                int temp;
                if(tx[i]==1){
                    temp = 0;
                    for(int k=1;k<=5;k++){
                        if(a[i][k]!=-1) temp+=a[i][k];
                    }
                    a[i][j] = sum-temp;
                    tx[i]--,ty[j]--;
                }else if(ty[j]==1){
                    temp = 0;
                    for(int k=1;k<=5;k++){
                        if(a[k][j]!=-1) temp+=a[k][j];
                    }
                    a[i][j] = sum-temp;
                    tx[i]--,ty[j]--;
                }
            }
        }
    }

    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++) printf("%3d ",a[i][j]);
        puts("");
    }
}

问题 B: APP的成绩单

利用结构体实现,根据学生每个信息的不同特征可以实现分类

typedef struct student{
    string name;
    string num;
    string gender;
    string goal;
}student;
void solve()
{
    int t;
    cin>>t;
    student s[100+10];
    for(int i=0;i<t;i++){
        string a[4];
        cin>>a[0]>>a[1]>>a[2]>>a[3];
        for(int j=0;j<4;j++){
            if(a[j]=="boy"||a[j]=="girl") s[i].gender = a[j];
            else if( (a[j][0]>='a' && a[j][0]<='z') ||(a[j][0]>='A' && a[j][0]<='Z')){
                s[i].name = a[j];
            }else if(a[j].length()==10) s[i].num = a[j];
            else s[i].goal = a[j];
 
        }
    }
    for(int j=0;j<t;j++){
        cout<<s[j].name<<" "<<s[j].num<<" "<<s[j].gender<<" "<<s[j].goal<<endl;
    }
 
}
 

问题 C: 6.1.4.1 最大的节点

题目描述容易想到用dfs去处理,但是这题数据量为1e5,如果从节点1~n依次搜索一遍,时间复杂度会达到O(n^2)。这题处理运用到了正难则反的思想,通过反向建立有向图,从节点下标最大的点开始搜索,找到哪些点可达,那么这么可达的点的最大标号就是搜索的起点。注意,在dfs中是不需要回溯的,这里推荐一下lxr学长讲dfs回溯的一篇文章,里面画的搜索树可以帮助理解:https://blog.csdn.net/m0_61735576/article/details/127814886?spm=1001.2014.3001.5502

我们反向建图从下标大的点搜索相当于搜索树从叶子往根部搜索,是不同分支合并到一条路的过程,是不用考虑选和不选的问题的。

const int N = 100000+10;
int idx,n,m,maxn;
int h[N],e[N],ne[N];
bool vis[N];
int res[N];
 
void add(int a,int b){
    e[idx] = b,ne[idx] = h[a],h[a] = idx++;
}
 
void dfs(int u)
{
    if(res[u]==0) res[u] = maxn;
    for(int i=h[u];i!=-1;i=ne[i]){
        int j = e[i];
        if(!res[j]) dfs(j);
    }
 
}
 
void solve()
{
    cin>>n>>m;
    memset(h,-1,sizeof h);
    while(m--){
        int a,b;
        scanf("%lld %lld",&a,&b);
        add(b,a);
    }
    for(int i=n;i>=1;i--){
        //memset(vis,0,sizeof vis);
        if(!res[i]){
            maxn = i;
            dfs(i);
        }
    }
    for(int i=1;i<=n;i++) printf("%lld ",res[i]);
}

问题 D: 6.2.2.1 油田

这题还没明白为什么读入scanf("%s")会WA

迷宫问题用dfs和bfs搜索都可以,这题是典型的一类迷宫问题有固定的套路。存储完图后进行遍历,如果该点没被搜索过,就开始进行dfs,把所有和该点连通的点都标记完后,联通块数量+1。

int n,m;
char g[100+10][100+10];//存储图
bool vis[100+10][100+10];//标记是否访问过
PII dxy[8] = {{1,0},{-1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};//八个方向

bool check(int x,int y)//检查是否走出地图
{
    if(x>=1 && x<=n && y>=1 && y<=m) return true;
    return false;
}

void dfs(int x,int y)
{
    vis[x][y] = true;
    for(int i=0;i<8;i++){
        int tx = x + dxy[i].first;
        int ty = y + dxy[i].second;
        if(check(tx,ty) && !vis[tx][ty] && g[tx][ty]=='@'){
            dfs(tx,ty);
        }
    }

}
void solve()
{
    while(cin>>n>>m){
        if(n==0 && m==0) break;
        memset(vis,0,sizeof vis);
        int ans = 0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++) cin>>g[i][j];
        }

        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(g[i][j]=='@' &&!vis[i][j]){
                    dfs(i,j);
                    ans++;
                }
            }
        }
        cout<<ans<<endl;
    }
    

}

问题 E: 6.3.2.1 电话网络

题目中描述的关键点其实就是我们离散数学中学到的割点,割点在书中的定义:在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,那么这个点集称为割点集。求关键点的个数就是求割点的个数。

处理有向图的强连通分量通常使用Tarjan算法,每个强连通分量作为搜索树中的一棵子树,搜索时,把当前搜索树中未处理的节点加入栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。

关于Tarjan求割点的算法模板,这里有相关的讲解:

割点(tarjan算法)_axtices的博客-CSDN博客_割点

const int maxn = 100+10;
int n,cnt,root; 
int head[maxn] , low[maxn],dfn[maxn],num;
bool cut[maxn];
struct Edge{
	int to , next;
}e[maxn*maxn];

void add(int u,int v){
	e[++cnt].next = head[u];
	e[cnt].to = v;
	head[u] = cnt;
}

void tarjan(int u){
	dfn[u] = low[u] = ++ num;
	int flag = 0;
	for(int i = head[u] ; i ; i = e[i].next){
		int v = e[i].to;
		if(!dfn[v]){
			tarjan(v);
			low[u] = min(low[u] , low[v]);
			if(low[v] >= dfn[u]){
				flag ++;
				if(u != root || flag > 1){ 
					cut[u] = true;
				}
			}
		}else{
			low[u] = min(low[u] , dfn[v]);
		}
	}
}

void init(){
	memset(head,0,sizeof head);
	memset(low,0,sizeof low);
	memset(dfn,0,sizeof dfn);
	memset(cut,false,sizeof cut);
	cnt = num = 0;
}

void solve()
{
    while(cin >> n && n){
		init();
		int u,v;
		while(cin >> u && u){
			while(1){
				char c = getchar();
				if(c == '\n') break;
				cin >> v;	
				add(u,v);
				add(v,u);
			}
		}
		for(int i = 1;i <= n ; i++){
			if(!dfn[i]){
				root = i;
				tarjan(i);
			}
		}
		int ans = 0;
		for(int i=1 ; i<= n ; i++){
			if(cut[i]) ans ++;	
		}
		cout << ans << endl;
	}
}

问题 F: 7.1.4.1 重型运输

题意为在无向图中,要求找到一条起点为1,终点为n且最小边权最大的通路,该通路的最小边权即最大承重。(通路的最小边权值即使构成通路所有边中权重最小的权值)

平常一般用dijkstra算法去求单源点最短路,这里可以通过改造dijkstra中的松弛不等式来解决题中问题。dist数组:记录从点1到当前点,允许通过的最大吨数。dits数组每次查找最大值进行比较,当有道路的最小值都比dist中的值大时,更新dist

网上还看见了用最大生成树来解决这道题的,具体链接:

POJ 1797 Heavy Transportation (最大生成树) - wuli涛涛 - 博客园

const int N = 1010;
int n,m;
int g[N][N];
bool vis[N];
int dist[N];//记录从1到当前点,允许通过的最大吨数
int dijkstra()
{
    for(int i=1;i<=n;i++) dist[i] = g[1][i];
    dist[1] = 0;
    for(int i=0;i<n;i++)
    {
        int t = -1;
        int maxn = -1;
        for(int j=1;j<=n;j++){
            if(!vis[j] && dist[j]>maxn ){
                maxn = dist[j];
                t = j;
            }
        }
        for(int j=1;j<=n;j++){
            if(dist[j]<min(dist[t],g[t][j]))
                dist[j] = min(dist[t],g[t][j]);
        }
        vis[t] = true;
    }

    if(dist[n]==0x3f3f3f3f) return -1;
    return dist[n];
}

void solve()
{
    int t;
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>n>>m;
        memset(g,-1,sizeof g);
        memset(vis,0,sizeof vis);
        while(m--){
            int a,b,c;
            cin>>a>>b>>c;
            g[a][b] = g[b][a] = max(g[a][b],c);
        }
        cout<<"Scenario #"<<i<<":"<<endl;
        cout<<dijkstra()<<endl<<endl;
    }
}

问题 G: 打怪兽version-3

暴力解决即可,从大到小排序,前k个元素不用计入总和

int a[200000+10];
bool cmp(int x,int y){
    return x>y;
}

void solve()
{
    int res = 0;
    int n,k;
    cin>>n>>k;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a,a+n,cmp);
    for(int i=k;i<n;i++) res+=a[i];
    cout<<res;
    
}

问题 H: 2.4.1 间谍

在B个字符串中,找到在A中并且不在C中,按照先进先出原则输出

void solve()
{
    int a,b,c;
    while(cin>>a>>b>>c)
    {
        string s;
        queue<string>q;
        map<string,int>mp;
        map<string,int>mp1;
        for(int i=0;i<a;i++){
            cin>>s;
            mp1[s] = 1;
        }
        for(int i=0;i<b;i++){
            cin>>s;
            q.push(s);
        }
        for(int i=0;i<c;i++){
            cin>>s;
            mp[s] = 1;
        }
        bool flag = false;
        while(q.size()){
            auto t = q.front();
            q.pop();
            if(!mp[t] && mp1[t]){
                cout<<t<<" ";
                flag = true;
            }
        }
        if(!flag) cout<<"No enemy spy";
        cout<<endl;
        
    }
    
}
 

问题 I: 2.4.2 Web导航

可以直接用STL里的stack,也可以自己用string数组模拟

string v[100+10];
int hh,tt;//hh为栈顶,0为栈底
void solve()
{
    string s;
    v[0] = "***###.acm.org/";
    while(cin>>s){
        if(s[0]=='Q') break;
        if(s[0]=='V'){
            string str;
            cin>>str;
            v[++tt] = str;
            hh = tt;
            cout<<v[tt]<<endl;
        }else if(s[0]=='B'){
            if(tt<=0){
                cout<<"Ignored"<<endl;
            }else{
                cout<<v[--tt]<<endl;
            }
        }else if(s[0]=='F'){
            if((tt+1)>hh){
                cout<<"Ignored"<<endl;
            }else{
                cout<<v[++tt]<<endl;
            }
        }
    }
}

问题 J: 2.4.3 骑士移动

最短步数考虑用bfs解决,走日字和走上下左右有一些区别,一共有八个方向,用队列实现bfs,从起点开始搜索,每次更新当前点能到达的所有点,最短的路径会比其他的路径更早标记,搜索完地图后输出dist[x][y](x,y)为终点坐标,dist数组为当前点距离起点的距离

int n;
PII st,ed;//起点和终点
char g[300+10][300+10];//存储图
int dist[300+10][300+10];//从起点开始到当前位置一共走了几步
PII dxy[8] = {{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1}};//八个方向
bool check(int x,int y)//检查是否走出地图
{
    if(x>=1 && x<=n && y>=1 && y<=n) return true;
    return false;
}

int bfs()
{
    memset(dist,-1,sizeof dist);
    dist[st.first][st.second] = 0;
    queue<PII>q;
    q.push({st.first,st.second});
    while(!q.empty()){
        auto t = q.front();
        q.pop();
        for(int i=0;i<8;i++){
            int tx = t.first + dxy[i].first;
            int ty = t.second + dxy[i].second;
            if(check(tx,ty) && dist[tx][ty]==-1){//在图内并且没被访问过
                q.push({tx,ty});
                dist[tx][ty] = dist[t.first][t.second]+1;
            }
        }
    }
    return dist[ed.first][ed.second];
}

void solve()
{
    int t;
    cin>>t;
    while(t--){
        cin>>n;
        cin>>st.first>>st.second;
        cin>>ed.first>>ed.second;
        st.first++,st.second++,ed.first++,ed.second++;
        cout<<bfs()<<endl;
    }

}

问题 L: 吃菜

和01背包模板最大的区别是多了一道不受时间限制的菜可以选择。无论最终点菜顺序是什么,我们都可以将某一份菜安排在m时刻来点,那么就可以把背包容量扩充到 m+w[i]-1,问题转化成了总共有m-1的时间的01背包问题。

状态f[i][j]定义:前 i 个物品,背包容量 j 下的最优解(最大价值)

每次决定当前菜选或者不选:

不选:dp[i][j]=dp[i-1][j];
选:dp[i][j]=dp[i-1][j-s[i].w]+s[i].v;

注意:进行状态转移的时候,状态转移方程中:dp[x][y]与dp[x-1][y-w[i]]状态有关,要保证 y-w[i]这个状态是最优的。所以我们应该按w从小到大排一下序。

下面是朴素版没优化的二维版本

const int N = 3000+10;
int n,m;
struct node{
    int w;
    int v;
}s[3005]; //存储道菜的价值和吃这道菜所耗费的时间

bool cmp(node a,node b)
{
    return a.w<b.w;
}
int dp[3005][6005];
void solve()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>s[i].w>>s[i].v;
    sort(s+1,s+1+n,cmp);
    for(int i=1;i<=n;i++){
        for(int j=0;j<s[i].w+m;j++){
            dp[i][j]=dp[i-1][j];
            if(j>=s[i].w) dp[i][j]=max(dp[i-1][j],dp[i-1][j-s[i].w]+s[i].v);
        }
    }
    int res=0;
    for(int i=1;i<=n;i++) res=max(dp[n][m+s[i].w-1],res);
    cout<<res<<endl;
}
 

问题 M: 矩形

自己没什么思路,看了看别人的想法

将每个点 (x,y) 拆成两个点 x 和 y,再将 x 和 y 连一条无向边。

这样原问题就被抽象成了一个图论问题,而且还是个二分图。相应的操作就变成了已知 a—b,a—d,c—b,c—d 中的三条边,然后添加剩余的一条边。

二分图长这个样子:(图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻)

 

对于每个连通分量的答案(其实就是把当前联通分量对应的二分图变成完全二分图所需加的边数),我们可以用 dfs 来求出它在 x 方向上的点数和 y 方向上的点数,求出二者的乘积,就是相应的完全二分图的边数,再减去当前连通分量上的边数即可。

我们可以先计算出所有连通分量所对应的完全二分图的边数之和,再减去已知的边数,从而得到答案。

const int N = 100000+10;
vector<int> to[N*2];
bool vis[N*2];
vector<int>cnt;
void dfs(int u) {
    if (vis[u]) return;
    vis[u] = true;
    cnt[u/N]++;
    for (int it : to[u]) dfs(it);
}
void solve()
{
    int n;
    cin >> n;

    for(int i=0;i<n;i++){
        int x,y;
        cin>>x>>y;
        y += N;
        to[x].push_back(y);
        to[y].push_back(x);
    }

    ll ans = 0;
    for(int i=0;i<N*2;i++){
        if (vis[i]) continue;
        cnt = vector<int>(2);
        dfs(i);
        ans += (ll)cnt[0] * cnt[1];
    }
    ans -= n;
    cout<<ans<<endl;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进阶训练赛(十二) 的相关文章

  • SpringCloud五大核心组件使用方法

    目录 SpringCloud各组件简单介绍EurekaFeignRibbonHystrixzuul SpringCloud各组件使用方法前提准备Eureka入门案例1 新建Module2 修改pom文件3 创建 96 application
  • java变量的定义

    JAVA数据类型 对于整型数据 xff0c 通常情况下使用int类型 但是如果表示极大的数据 xff0c 就需要long类型了 xff0c byte和short类型主要用于特定的应用场合 xff0c 例如 xff1a 底层的文件处理或者需要
  • java数据类型转换(强制转换)

    数据类型的转换 xff0c 分为自动转换和强制转换 自动转换是程序在执行过程中 无声 进行的转换 xff0c 不需要提前声明 xff0c 一般是从位数低的类型向位数高的类型转换 xff1b 强制转换则必须在代码中声明 xff0c 转换顺序不
  • 斗鱼直播与熊猫直播竞品分析

    引言 xff1a 目前国内直播平台虽然十分火爆 xff0c 但是直播的市场尚未成熟 xff0c 斗鱼等其他直播平台在利用自己用户的基础一直处在直播平台的主流市场 xff0c 而新晋直播平台开始大肆的宣传和吸引用户 xff0c 最终直播这块市
  • 知乎产品分析|知识社区何去何从

    一 引言 2017 年 2 月 xff0c 知乎月独立用户设备数再次回升 xff0c 相比 1 月上涨了 11 2 xff0c 达到了 1109 万台 1 1 目的 通过对知乎这款产品的分析 xff0c 锻炼自己的思维能力 xff0c 深化
  • 我的vimrc配置文件

    34 vundle begin set nocompatible 34 与vi不一致 filetype off filetype plugin on 34 检测插件 set rtp 43 61 vim bundle vundle 34 载入
  • 以CSDN为例解释尼尔森十大交互原则

    一 状态可见原则 用户在网页上的任何操作 xff0c 不论是单击 滚动还是按下键盘 xff0c 页面应即时给出反馈 即时 是指 xff0c 页面响应时间小于用户能忍受的等待时间 举例 xff1a CSDN上文章底部都会有一个 喜欢 按钮 x
  • 游戏化思维——核心驱动力

    游戏是一个令人着迷 xff0c 并且能够让人沉迷于此的东西 xff0c 而游戏之所以如此迷人 xff0c 不但是游戏的制作精良和剧情引人入胜 除此之外还有些其他原因 xff0c 激励人民玩游戏的原因是 xff1a 游戏能够触及到人性的核心驱
  • 从产品设计到用户设计

    从产品设计到用户设计 一说起产品设计 xff0c 人们往往想到两个方面 感官方面 功能方面 感官方面 xff1a 精心设计的产品能够给用户带来赏心悦目的感觉 xff0c 当然极大部分是属于触感方面 xff08 嗅觉和味觉因为局限问题无法在产
  • 为体验设计——使用第一

    产品设计和用户体验设计有什么不同呢 xff1f 每个产品都是以用户是人类为前提而设计出来的 xff0c 而产品的每一次使用 xff0c 都会产生相应的体验 用户体验设计并完全不等同于产品设计 但是对于一个简单的情况下 xff0c 创建一个良
  • 用户体验和网站

    用户体验对于所有的产品和服务来讲 xff0c 都是至关重要的 现在讨论一种特殊产品的用户体验 xff1a 网站 xff08 这里的 网站 一词包括以内容为主的网站产品和以交互为主的网站应用 xff09 在网站上 xff0c 用户体验比任何一
  • .net C# 堆 栈 垃圾回收 GC

    NET C NET C NET C NET C NET C NET C NET C 栈 堆 垃圾回收 GC 1 尽管在 NET framework下我们并不需要担心内存管理和垃圾回收 Garbage Collection xff0c 但是我
  • 值类型总是分配在栈上吗?

    不是 xff0c 比如下面三种情况 xff1a 1 引用类型内部的变量 xff0c 即使是值类型 xff0c 也会随同引用类型的实例一起被分配在堆上 2 对于值类型的数组 xff0c 由于数组是引用类型 xff0c 数组内的值类型元素 xf
  • .NET垃圾回收机制 转

    在 NET Framework中 内存中的资源 即所有二进制信息的集合 分为 34 托管资源 34 和 34 非托管资源 34 托管资源必须接受 NET Framework的CLR 通用语言运行时 的管理 诸如内存类型安全性检查 而非托管资
  • Spring Boot 升级所遇到的坑们s 1.5.x升级到2.1.x

    下面总结从Spring Boot 1 5 15 Release版本升级到2 1 1 Release版本所遇到的问题 xff0c 因为每个项目所依赖库的多少不同 xff0c 所以有些我列出的问题可能你的产品没有遇到 xff0c 或者你的问题我
  • A simple Binary Search Tree written in C# and the case at the bottom

    Introduction In Computer Science a binary tree is a hierarchical structure of nodes each node referencing at most to two
  • vim学习资源

    http www vimer cn http coolshell cn http vimcdoc sourceforge net doc quickfix html 就这两个资源用好了 xff0c 就足够了

随机推荐

  • asp.net 获取客户端IP地址

    private string GetClientIP string result 61 HttpContext Current Request ServerVariables 34 HTTP X FORWARDED FOR 34 if nu
  • log4net 使用示例 asp.net + winform

    log4net 是 apache org 在 log4j的基础上推出的针对 NET程序的开源的日志组件 log4net目前的最新版本是 1 2 10 xff0c log4net支持的日志保存方式 xff0c 可谓丰富之极 xff0c 包括
  • Log4net 配置写不同文件

    以下配置了二种写文件 xff0c 第一种根据日期写文件yyyyMMdd txt xff0c 第二种是写固定文件login txt 1 xff0c 下载Log4net组件 xff1a http logging apache org log4n
  • Log4Net使用详解(续)

    说明自从上次在2008年在博客上发表过有关log4net的用法介绍文章之后 xff08 网址 xff1a http blog csdn net zhoufoxcn archive 2008 03 26 2220533 aspx xff09
  • httpWebRequest 通过代理 连接网络

    via Proxy connect the website WebProxy myProxy 61 new WebProxy myProxy Address 61 new Uri 34 http XXXXXXX com 9000 34 my
  • 使用windbg排查一个内存溢出的问题

    发现有一个服务占用大量的内存 奇怪的是服务一开始的时候只占用100M左右内存 xff0c 随着时间推移越来越大 xff0c 最后导致服务器内存吃紧 这可以算是一种内存泄漏的问题 xff0c 之所以标题不说是内存泄漏 xff0c 最后就会知道
  • 用WinDbg排除“内存溢出”故障

    文章摘要 内存溢出有时像 魔鬼 一样缠绕着我们的程序 xff0c 用一般的方法不易驱除 主要难点是搜查 魔鬼 的藏身之处 这时 xff0c 我们可以请来 WinDbg xff08 Debugging Tools for Windows xf
  • windbg 的常用命令--强大!常用!

    如何手工抓取dump文件 在生产环境下进行故障诊断时 xff0c 为了不终止正在运行的服务或应用程序 xff0c 有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试 首先一种比较直观简洁的方式就是用WinDbg等调试器直接atta
  • 用Windbg调试.NET程序的资源泄漏

    在产品环境中的一个Windows服务出现了异常情况 这是一个基于WCF的 NET程序 xff0c 它向网络应用 xff08 Web Application xff09 提供WCF服务 xff0c 同时也调用其他WCF服务以完成任务 突然 x
  • 堆与栈的区别【收藏】

    网上看到的两篇关于 堆与栈 的介绍 xff0c 讲的比较清楚 1 堆和栈的区别 原地址 xff1a http blog csdn net goingup archive 2006 03 07 618309 aspx 在bbs上 xff0c
  • vimdiff 使用笔记

    vimdiff 是建立在 diff 命令之上的 启动方法 xff1a vimdiff file left file right 或者 vim d file left file right 只在某一文件中存在的行的背景色被设置为蓝色 xff0
  • 负数的二进制表示方法 原码、反码、补码

    6 5 原码 反码 补码 结束了各种进制的转换 xff0c 我们来谈谈另一个话题 xff1a 原码 反码 补码 我们已经知道计算机中 xff0c 所有数据最终都是使用二进制数表达 我们也已经学会如何将一个10进制数如何转换为二进制数 不过
  • 二、十六进制数互相转换

    6 1 为什么需要八进制和十六进制 编程中 xff0c 我们常用的还是10进制 必竟C C 43 43 是高级语言 比如 xff1a int a 61 100 b 61 99 不过 xff0c 由于数据在计算机中的表示 xff0c 最终以二
  • 移位运算符 位逻辑运算符

    移位运算符 移位运算符就是在二进制的基础上对数字进行平移 按照平移的方向和填充数字的规则分为三种 xff1a lt lt xff08 左移 xff09 gt gt xff08 带符号右移 xff09 和 gt gt gt xff08 无符号
  • 数据类型对应字节数(32位,64位 int 占字节数)

    一 程序运行平台 不同的平台上对不同数据类型分配的字节数是不同的 个人对平台的理解是CPU 43 OS 43 Compiler xff0c 是因为 xff1a 1 64位机器也可以装32位系统 xff08 x64装XP xff09 xff1
  • 【JAVA】03版本excle导出数据

    03版本excle导出list lt Object gt 数据 前端页面请求 使用流返回 public static String exportExcel HttpServletRequest request HttpServletResp
  • C++码农要读的经典

    刚大四 xff0c 还在忙着找工作 xff0c 读过的书不是很多 xff0c 还有一些好书在读 xff0c 还有一些书将来必读 C语言程序设计 谭浩强版本 这个版本一致被人说误导子弟 xff0c 当然还有很多人推崇 我觉得这本书不是什么好书
  • 进阶训练赛(四)题解

    A 交换a b的值 直接输出b a void solve int a b cin gt gt a gt gt b cout lt lt b lt lt 34 34 lt lt a B 素数回文数的个数 从11 n遍历一遍找出满足即是回文数又
  • AtCoder Beginner Contest 285(A~E)

    A Edge Checker 2 在满二叉树中 xff0c 判断两个两个点是否是父子关系 void solve int a b cin gt gt a gt gt b if b 61 61 2 a b 61 61 2 a 43 1 puts
  • 进阶训练赛(十二)

    目录 问题 A 符文宗师的魔方阵 问题 B APP的成绩单 问题 C 6 1 4 1 最大的节点 问题 D 6 2 2 1 油田 问题 E 6 3 2 1 电话网络 问题 F 7 1 4 1 重型运输 问题 G 打怪兽version 3 问