Hdu 2051 - Bitset

本文介绍了一种使用栈数据结构将十进制数转换为二进制数的方法,并提供了一个完整的C语言实现示例。该程序通过不断除以2并将余数压入栈中来完成转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构,栈:十进制转换二进制

 

 

 

AC代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 10005
typedef int Elemtype;
typedef struct Stack
{
    Elemtype data[M];
    int top;
}Stack;
struct Stack *Init()
{
    struct Stack *s;
    s= (struct Stack *)malloc(sizeof(struct Stack ));
    if(s!= NULL)
    {
        s->top = -1;
        return s;
    }
    else exit(0);
}

int main()
{
    struct Stack *s;
    int n,temp;
    s = Init();
    while(scanf("%d",&n)!= EOF)
    {
        while(n)
        {
            s->top++;
            s->data[s->top] = n%2;
            n = n/2;
        }
        while(s->top != -1)
        {
            temp = s->data[s->top];
            s->top--;
            printf("%d",temp);
        }
        printf("\n");
    }
    return 0;
}


 

### CodeForces 平台上关于传递闭包的概念及其实现 #### 传递闭包定义 在一个有向图 \( G=(V,E) \) 中,如果存在一条从顶点 \( u \) 到顶点 \( v \) 的路径,则认为 \( u \) 可达于 \( v \)[^1]。传递闭包是指通过某种方式使得所有可达关系显式表示出来的新图。 #### Floyd-Warshall算法用于计算传递闭包 Floyd-Warshall是一种经典的多源最短路算法,在此可以用来构建传递闭包矩阵。该方法基于动态规划的思想,时间复杂度为\( O(n^3) \),其中\( n \) 是节点数量。具体来说: ```cpp const int MAXN = 105; bool graph[MAXN][MAXN]; // 初始化为false void floyd_warshall(int n){ for (int k = 0; k < n; ++k) for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) graph[i][j] |= (graph[i][k] && graph[k][j]); } ``` 这段代码遍历所有的中间结点`k`,并更新每一对结点之间的连通状态。当发现可以通过某个中间结点到达另一结点时,就标记相应的位为真。 #### 应用场景——二分图匹配中的最长反链寻找 在某些题目中,比如Codeforces 590E Birthday问题里提到的方法之一就是先求解传递闭包再利用二分图的最大独立集来找到最长反链[^4]。这通常涉及到将原图转换成其对应的传递闭包版本,之后按照特定策略进行匹配操作找出符合条件的结果集合。 #### 使用Bitset优化枚举过程 考虑到效率问题,在处理大规模数据结构下的传递闭包运算时可采用bitset来进行快速逻辑运算。例如,在HDU 6496题目的分析部分描述了一种使用bitset加速交点判断的技术[^2]。这种方法能够显著减少不必要的重复计算量,从而提高整体性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值