chip

HDU 5536 Chip Factory (01字典树)

浪尽此生 提交于 2020-04-03 08:19:13
题意:就是求max((si+sj)^sk) 思路:就是直接建01字典树,在上面求异或,对于枚举的ij,我们先在字典树中进行删除,然后在插入进去(调一下午也没调出来,不知道错哪里了) 代码: #include <bits/stdc++.h> using namespace std; const int maxn=1000+10; int n; int a[maxn]; int sz; int trie[100000+10][2]; int cnt[100000+10]; void init() { sz=1; memset(trie[0],0,sizeof(trie[0])); } void Insert(int v,int d) { int u=0; for(int i=30;i>=0;i--){ int c=(v>>i)&1; if(!trie[u][c]){ trie[sz][0]=trie[sz][1]=0; cnt[sz]=0; trie[u][c]=sz++; } u=trie[u][c]; cnt[u]+=d; } } int solve(int x) { int res=0,u=0; for(int i=30;i>=0;i--){ int c=(x>>i)&1; if(trie[u][c^1] && cnt[trie[u][c^1]]){ res|=(1<<i); u

UPC-9264 Chip Factory(01字典树)

孤人 提交于 2020-04-02 14:15:57
题目描述 John is a manager of a CPU chip factory, the factory produces lots of chips everyday. To manage large amounts of products, every processor has a serial number. More specifically, the factory produces n chips today, the i-th chip produced this day has a serial number si. At the end of the day, he packages all the chips produced this day, and send it to wholesalers. More specially, he writes a checksum number on the package, this checksum is defined as below: which i, j, k are three different integers between 1 and n. And is symbol of bitwise XOR. Can you help John calculate the checksum

【01字典树】hdu-5536 Chip Factory

老子叫甜甜 提交于 2020-04-02 14:15:48
【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=5536 【题意】 求一个式子,给出一组数,其中拿出ai,aj,ak三个数,使得Max{ (ai+aj) ^ ak } 【题解】 其实这里就需要大家做一个删除的操作; 类似于dfs的恢复现场的操作即可。 【代码】 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int N = 1e5+10; 6 int Son[N*31][2]; 7 int a[N],idx; 8 int Cnt[N*31]; 9 void Insert( int x ){ 10 int p = 0 ; 11 for(int i=30;~i;i--){ 12 int t = x >> i & 1 ; 13 if( !Son[p][t] ){ 14 Son[p][t] = ++idx; 15 } 16 p = Son[p][t]; 17 Cnt[p] ++ ; 18 } 19 } 20 void Delete( int x ){ 21 int p = 0 , tmp ; 22 for(int i=30;~i;i--){ 23 int t = x >> i & 1 ; 24 if(

uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

别来无恙 提交于 2020-02-28 03:51:09
在支持Nand Flash操作之前,首先要对Nand Flash的读写方法有一定的了解,参考文章: S3C2440-裸机篇-10 | 使用S3C2440操作Nand Flash 1. 去除nand flash屏蔽 在之前初步移植uboot时,发现开启nand flash之后编译不通过,所以屏蔽了nand flash的使用,在单板配置文件 include/configs/smdk2440.h 中开启: 然后编译,改正编译错误。 2. 定位编译出错问题所在 首先来修复第一个问题: 查看s3c2410_nand.c文件的72行: 这个指针有问题的话,就是nand这个结构体变量的定义问题,找到nand变量的定义: struct s3c2410_nand * nand = s3c2410_get_base_nand ( ) ; 接下来问题就变为 struct s3c2410_nand 这个结构体定义有问题,继续寻找该定义,果然,在文件 arch/arm/include/asm/arch-s3c24x0/s3c24x0.h 中,我们定义的是CONFIG_S3C2440,所以有struct s3c2440_nand的定义,没有struct s3c2410_nand的定义: 3. 修复编译错误 — 添加s3c2440_nand.c文件 3.1. 添加文件到工程中 这里涉及到将所有定义全部改变

Xilinx OpenCL的存储模型

落爺英雄遲暮 提交于 2020-02-07 11:28:29
具体细节的展示图如下: 通过上图可知,在OpenCL中提供的存储模型中,有如下几种Memory类型。 Host Memory Host Memory指的是连接在主板上的内存条,仅供host进行数据读取。 Off-Chip Global memory Off-Chip Global memory 指的是在FPGA板卡上通过硬件与 FPGA 芯片连接的内存条。数据存取所花费的时间相对较长,但是容量相对较大。 Off-Chip Global Memory Off-Chip Global Memory Host端可以通过PCIe进行数据读写,Device端同样可以进行数据的读写 Off-Chip Constant Global Memory Constant Global Memory同样是在FPGA板卡上通过硬件与 大专栏 Xilinx OpenCL的存储模型 >FPGA 芯片连接的内存条。不同的是Host端只能进行写入,Device端只能进行读出。适用于参数数据的传输。 On-Chip Memory On-Chip Memory 主要是采用FPGA中BRAM资源组成,具有随机存储和低延时的特点,但是资源有限。 On-Chip Global Memory On-Chip Pipes Local Memory & Private Memory Local Memory可用于所有的 work

Linux中断体系结构

旧街凉风 提交于 2020-01-28 02:17:44
1.中断处理体系结构 Linux内核将所有中断统一编号,使用一个irq_desc结构数组来描述这些中断。 数组声明在 /linux/kernel/irq/handle.c中,其中 #define NR_IRQS 128 ,定义在 /linux/include/ asm/irq.h 中 1 /* 2 * Linux has a controller-independent interrupt architecture. 3 * Every controller has a 'controller-template', that is used 4 * by the main code to do the right thing. Each driver-visible 5 * interrupt source is transparently wired to the appropriate 6 * controller. Thus drivers need not be aware of the 7 * interrupt-controller. 8 * 9 * The code is designed to be easily extended with new/different 10 * interrupt controllers, without having to do

字符设备驱动(三)中断框架

那年仲夏 提交于 2020-01-27 07:53:57
目录 字符设备驱动(三)中断框架 引入 汇编处理 拷贝向量表 向量表宏解析 跳转函数 C函数处理 asm_do_IRQ __set_irq_handler s3c24xx_init_irq handle_edge_irq handle_IRQ_event desc->action 小结 流程 设置 irq_desc 数组 关键结构成员 完整框架图 流程一览 设置向量表 设置全局中断数组 设置用户action动作 title: 字符设备驱动(三)中断框架 tags: linux date: 2018-11-22 18:58:22 toc: true --- 字符设备驱动(三)中断框架 引入 裸机中断流程 外部触发 CPU 发生中断, 强制的跳到异常向量处 跳转到具体函数 保存被中断处的现场(各种寄存器的值)。 处理具体任务 恢复被中断的现场 LINUX流程 ARM 架构的 CPU 的异常向量基址可以是 0x0000 0000 ,也可以是 0xffff0000 ,这个地址并不代表实际的内存,是虚拟地址.当建立了虚拟地址与物理地址间的映射后,得将那些异常向量,即相当于把那些跳转指令复制拷贝到这个 0xffff0000 这个地址处去。 汇编处理 在 trap_init 中实现( start_kernel 中调用) // arch/arm/kernel/traps.c void __init

Linux中断处理流程

风流意气都作罢 提交于 2020-01-26 17:41:11
1. 中断处理流程   当中断发生时,Linux系统会跳转到asm_do_IRQ()函数(所有中断程序的总入口函数),并且把中断号irq传进来。根据中断号,找到中断号对应的irq_desc结构(irq_desc结构为内核中中断的描述结构,内核中有一个irq_desc结构的数组irq_desc_ptrs[NR_IRQS]),然后调用irq_desc中的handle_irq函数,即中断入口函数。我们编写中断的驱动,即填充并注册irq_desc结构。 2. 中断处理数据结构:irq_desc   Linux内核将所有的中断统一编号,使用一个irq_desc[NR_IRQS]的结构体数组来描述这些中断:每个数组项对应着一个中断源(也可能是一组中断源),记录中断入口函数、中断标记,并提供了中断的底层硬件访问函数(中断清除、屏蔽、使能)。另外通过这个结构体数组项中的action,能够找到用户注册的中断处理函数。 struct irq_desc { unsigned int irq; irq_flow_handler_t handle_irq; struct irq_chip *chip; struct msi_desc *msi_desc; void *handler_data; void *chip_data; struct irqaction *action; /* IRQ action

linux 中断管理(一)

这一生的挚爱 提交于 2020-01-25 16:46:02
一、中断作用 Linux 内核需要对连接到计算机上的所有硬件设备进行管理。如果要管理这些设备,首先得和它们互相通信才行。 一般有两种方案可实现这种功能: 轮询(polling) 让内核定期对设备的状态进行查询,然后做出相应的处理; 中断(interrupt) 让硬件在需要的时候向内核发出信号(变内核主动为硬件主动)。 使用轮询的方式会占用CPU比较多的时间,效率极低。例如:要读取一个按键有没有被按下时,一个进程需要不断地查询按键有没有被按下。这样这个任务就占用CPU大量得时间,使得CPU做了大量的无用功。使用中断提供这样的一个机制。当按键没有被按下的时候,挂起当前进程,将控制权转交给其他进程。当按键按下的时候,操作系统把当前进程设为活动的,从而允许该进程继续执行。 二、linux中断管理 linux 内核将所有的中断统一编号,使用一个 irq_desc 结构体数组描述中断。一个数组项对用一个中断(或者是一组中断,它们共用中断号)。 struct irq_desc 结构体记录了,中断的名称、中断状态,底层硬件访问接口(使能中断,屏蔽中断,清除中断),中断处理函数的入口, 通过它可以调用用户注册的中断处理函数。 1、struct irq_desc struct irq_desc 在 include\linux\irq.h 文件里面定义 struct irq_desc { irq

HDU5536 Chip Factory

ε祈祈猫儿з 提交于 2020-01-21 18:52:41
题意: 给出一个数组 \(s\) ,求 \[ max_{i,j,k}(s_i + s_j)\oplus s_k ,i\neq j\neq k \] 思路: 01字典树,首先还是正常插入。可以想到枚举 \(i\) 、 \(j\) 的和,再字典树跑 \(k\) ,这里涉及下标不能相同,所以可以把 \(i\) 、 \(j\) ,先删除了。在插入的时候计数 \(cnt[u]++\) ,删除就依次把到达的各点 \(cnt[u]--\) 。跑 \(k\) 的时候判断是否可到达即可。 #include<bits/stdc++.h> using namespace std; const int N = 100010; const int inf = 0X3f3f3f3f; const long long INF = 0x3f3f3f3f3f3f3f3f; const double eps = 1e-6; const double pi = acos(-1.0); const int mod = 1000000007; typedef long long ll; int _; int n; int a[1010]; int tri[32 * 1010][2]; int cnt[32 * 1010], val[32 * 1010]; int tot; void init() { memset(tri,