LA 3641 置换

#include<cstdio>
#include<cstring>
int main() {
  char B[30];
  int vis[30], cnt[30], T;
  scanf("%d", &T);
  while(T--) {
    scanf("%s", B);
    memset(vis, 0, sizeof(vis));
    memset(cnt, 0, sizeof(cnt));
    for(int i = 0; i < 26; i++)
      if(!vis[i]) { // 找一个从i开始的循环
        int j = i, n = 0;
        do {
          vis[j] = 1; // 标记j为“已访问”
          j = B[j] - 'A';
          n++;
        } while(j != i);
        cnt[n]++;
      }
    int ok = 1;
    for(int i = 2; i <= 26; i++)
      if(i%2 == 0 && cnt[i]%2 == 1) ok = 0;
    if(ok) printf("Yes\n"); else printf("No\n");
  }
  return 0;
}


书上的代码:


在页式内存管理中,将程序空间分成大小相同的页,物理内存空间也分成大小相同的块,页的大小和块的大小一致。当程序装入内存准备运行时,逻辑上连续的页可以装入不连续的物理块中(当然也可以是连续的物理块)。程序执行时,为了正确地访问内存物理地址,需要使用页表,该表在创建进程由操作系统在内存特定区域创建,并根据当时的内存分配情况,动态地将程序中的各页装入内存的空闲块中,并填上页表。 在支持页式管理的系统中,为了加快地址映射速度,通常都把页表的全部或一部分放在快表中,由硬件自动完成地址映射过程。程序的逻辑地址可表示为: P W 其中P为页号,W为页内位移。假设块或页的大小为2nB(n为整数),则W的取值范围为0-2n-1。 给定一个逻辑地址LA,可以用两种方法得到P和W。 (1)P=LA>>n,W=LA&(2n-1) (2)P=INT(LA/2n) ,W=LA % 2n 当取得页号P 后查页表,能得到这一页装在内存中的块号B,也可以采用两种方法计算物理地址PA。 (1)PA=(B<<n)|W (2)PA=B×2n+W 由于在CPU执行逻辑指令的速度远远高于执行算术指令的速度,所以都是采用方法一进行地址映射。 在进程执行的过程中,如果访问的页暂时不在内存,便产生缺页中断,由操作系统负责把所缺的页从外存调入内存,然后再重复执行产生缺页中断的指令,从而实现请求页式管理。 在调页的过程中,如果内存还有空闲的物理块时,当然可以给该进程追加内存分配;如果当内存中没有空闲的物理块时就需要淘汰一个当前在内存的“老页”,这个“老页”可以属于该进程本身,也可能属于别的进程。为了降低置换算法的复杂性而又不对其它进程产生影响,本实验采用前者,即局部置换方法。这样便可以在一个比较小的内存空间里运行一个较大的进程,从而实现虚拟存储器。 怎么用c++来写
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值