第十四周 5.30 --- 6.5

新的一周 / w \

大家都在图书馆看书..我在图书馆睡觉...

5.31

做cf 碰到一道 bfs 的题,想起这题还没有补

hiho 1233 Boxes

去年一神就教过我...可是又不会了..

还是状态的表示没有想清楚,是每一个块的权值 乘以 位置的编号 表示一个状态

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7
 8 typedef pair<int,int> pii;
 9 const int maxn = 1e6+5;
10 int ans[8][maxn],box[8];
11 int val[8];
12 int dx[2] = {-1,1};
13
14 struct node{
15     int v,id;
16     friend bool operator < (node n1,node n2){
17         return n1.v < n2.v;
18     }
19 }V[8];
20
21 int get(int n){
22     sort(V,V+n);
23     int ret = 0;
24     for(int i = 0;i < n;i++) ret += V[i].id * val[i+1];
25     return ret;
26 }
27
28 void rget(int cur){
29     memset(box,0,sizeof(box));
30     for(int i = 7;i;i--){
31         int id = cur/val[i];
32         box[id] = i;
33         cur = cur%val[i];
34     }
35 }
36
37 void Pro(){
38     memset(ans,-1,sizeof(ans));
39     for(int n = 1;n <= 7;n++){
40         int cur = 0,t = 0;
41         for(int i = 0;i < n;i++) cur += i*val[i+1];
42         queue<pii> q;
43         q.push(pii(cur,0));
44         ans[n][cur] = 0;
45         while(!q.empty()){
46             pii tmp = q.front();q.pop();
47             cur = tmp.first;t = tmp.second;
48             rget(cur);
49             for(int i=0;i<n;i++){
50                 if(!box[i]) continue;
51                 for(int k = 0;k < 2;k++){
52                     int pos = i+dx[k];
53                     if(pos < 0 || pos >= n) continue;
54                     if(!box[pos]||box[i] < box[pos]){
55                         int Next=cur-i*val[box[i]]+pos*val[box[i]];
56                         if(ans[n][Next]<0) {
57                             ans[n][Next]=t+1; q.push(pii(Next,t+1));
58                         }
59                     }
60                 }
61             }
62         }
63     }
64 }
65
66 int main(){
67     val[0] = 0;val[1] = 1;
68     for(int i = 2;i <= 7;i++) val[i] = val[i-1]*7;
69     Pro();
70     int T;
71     scanf("%d",&T);
72     while(T--){
73         int n;
74         scanf("%d",&n);
75         for(int i = 0;i < n;i++){
76             scanf("%d",&V[i].v);
77             V[i].id = i;
78         }
79         int cur = get(n);
80         printf("%d\n",ans[n][cur]);
81
82     }
83     return 0;
84 }

时间: 2024-10-24 04:28:31

第十四周 5.30 --- 6.5的相关文章

20145235 《信息安全系统设计基础》第十四周学习总结

第九章  虚拟存储器 一.虚拟存储器提供了三个重要能力: 1.将主存看作是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动的区域,并根据需要在磁盘和主存之间来回传送数据: 2.为每个进程提供了一致的地址空间,从而简化了存储器管理: 3.保护了每个进程的地址空间不被其它进程破坏. 二.理解虚拟存储器的原因: 1.虚拟存储器是中心的:它是硬件异常.硬件地址翻译.主存.磁盘文件和内核软件的交互中心: 2.虚拟存储器是强大的:它可以创建和销毁存储器片.可以映射存储器片映射到磁盘某个部分等等: 3

第十四周冲刺博客

第十四周 星期一 星期二 星期三 星期四 星期五 星期六 所花时间 8:00-9:50(上课时间) 13:00-13:15(站立会议) 13:30-15:00(查资料编写软件) 13:00-13:15(站立会议) 15:00-17:35 (查找网上的相关代码) 13:00-13:15(站立会议) 16:20-18:30(编写关注回复视图) 13:00-13:15(站立会议) 15:20-19:30(继续编写程序) 编写最优书价课堂作业 13:00-13:15(站立会议) 8:50-10:30 (

十三 十四周总结

1 //十三周总结 2 //在看挑战程序设计的第二章和第三章的第一节 3 //二分 4 //1.从一个 有序的数组里面查找某一个值 5 int pos=lower_bound(a,a+n,key)-a;//返回的pos是大于等于键值的第一个位置 6 int pos=upper_bound(a,a+n,key)-a;//返回的pos是严格大于键值的第一 个位置 7 //2.判断一个解是否可行 8 //1)一般应该是先确定上界,下界,一个判断解是否可行的ok函数来找 9 //2) 看书上写的,输出小

20145311 《信息安全系统设计基础》第十四周学习总结

20145311 <信息安全系统设计基础>第十四周学习总结 教材学习内容总结 1.物理寻址计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每字节都有一个唯一的物理地址PA.第一个字节的地址为0,接下来的字节的地址为1,再下一个为2,依此类推.给定这种简单的结构,CPU访问存储器的最自然的方式就是使用物理地址,我们把这种方式称为物理寻址.2.虚拟寻址使用虚拟寻址时,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址.将一个虚拟地址转换为物

2017-2018-1 20155201 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155201 <信息安全系统设计基础>第十四周学习总结 教材学习内容总结 输入/输出(I/O)是在主存和外部设备(例如磁盘驱动器.终端和网络)之间复制数据的过程.输入操作是从I/O设备复制数据到主存,输出操作是从主存复制数据到I/O设备. 在Unix系统中,通过使用由内核提供的系统级UnixI/O函数来实现较高级别的I/O函数.但是Unix I/O的学习也必不可少,Unix I/O是系统操作不可或缺的部分,我们需要通过学习理解其他的系统概念,而且很多时候,使用高级I

20155325 2017-2018 1 《信息安全系统设计基础》 第十四周学习总结

++不论是在查资料还是编译运行时总能碰到这个库那个链接的问题,所以我认为有必要再回去看看第七章++ 教材学习内容总结 静态链接过程 命令: gcc -Og -o 可执行目标文件名 main.c 函数名.c //编译 ./可执行目标文件名 //运行 可重定向目标文件&可执行目标文件 符合和符号表 任何带有static属性声明的全局变量或者函数都是模块私有的. 符号表是由汇编器构造的,使用编译器输出到汇编语言.s文件中的符号. 与静态库链接 使用C标准库和数学库中函数的程序 gcc main.v /

2017-2018-1 20155235 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155235 <信息安全系统设计基础>第十四周学习总结 教材学习内容总结 1.X86 寻址方式的变化: DOS时代的平坦模式,不区分用户空间和内核空间,很不安全: 8086的分段模式: IA32的带保护模式的平坦模式 2.机器编程的两种抽象: 指令集体系结构(Instruction set architecture,ISA)--定义指令格式以及每条指令执行之后对状态的影响.大多数ISA将程序行为描述成按顺序执行的: 虚拟地址 3.一些处理器状态 1.PC,即程序计数

2017-2018-1 20155216 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155216 <信息安全系统设计基础>第十四周学习总结 第三章:程序的机器级表示 教材学习内容总结 历史观点 Intel处理器系列俗称x86,开始时是第一代单芯片.16位微处理器之一. 每个后继处理器的设计都是后向兼容的--较早版本上编译的代码可以在较新的处理器上运行. X86 寻址方式经历三代: 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 2 8086的分段模式 3 IA32的带保护模式的平坦模式 c语言代码.汇编代码.机器代码之间的关系 1.C

# 2017-2018-1 20155224 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155224 <信息安全系统设计基础>第十四周学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的记一下 教材学习中的问题和解决过程 (一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题). 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验). 但是我还是不太懂,我的困惑是(说明困惑).[或者]我反对作者的观点(提出作者的观点,自己的观点,以及理由). ) 问