Problem A: 加法变乘法 Time Limit: 10 Sec Memory Limit: 256 MB Description 已知X可以写成从1开始连续若干个整数的和, 现在要求把其中两个不相邻的加号变成乘号,使得结果为Y。 找出所有满足条件的可能答案并输出(把两个乘号左边的数字用小括号括起来,中间用英文逗号间隔,两个括号之间不空格); 若找不到满足的条件,则输出“NONE”字样。编写程序,完成n组数据的判定。 例如:当X为1225,Y为2015时 因为:1+2+3+ ... + 49 = 1225 且1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015 所以:一个解为(10,27)。 Input 第一行为n值,接下来依次n行的第一个数据是加法结果X,第二个数据是变乘法后的结果Y,以空格间隔。 Output 输出n行,每一行的格式为“(***,***)(***,***)”(或者“NONE”)。请严格按照 格式书写,不能出现其它文字或符号 继续阅读 >>


娄泽豪 17/06/18 14:28:43
伪代码 BFS(G, s): for each vertex u ∈ G.V - {s}: u.color = White u.d = ∞ u.π = NIL s.color = Gray s.d = 0 s.π = NIL Q = ∅ Q.push(s) while Q ≠ ∅: u = Q.pop() for each v ∈ G.Adj[u]: if v.color == White then v.color = Gray v.d = u.d + 1 v.π = u Q.push(v) u.color = Black C++的一般实现方式 第一种写法 首先,我们严格按照伪代码形式来将之写为C++形式。 第一步就是先构造每一个结点,因 继续阅读 >>


娄泽豪 17/06/02 20:31:56
栈指令 指令效果描述pushq S %rsp ← %rsp - 8将四字压入栈 (%rsp) ← Spopq D D ← (%rsp)将四字弹出栈 %rsp ← %rsp + 8 需要注意的点 pushq指令的行为等价于:subq $8, %rsp 与movq %rbp, (%rsp)两条指令的合效果。 popq指令的行为等价于: movq (%rsp), %rax 与addq $8, %rsp两条指令的合效果。 push/pop指令不存在其他后缀。 算数和逻辑指令 指令效果描述leaq S , DD ← &S加载有效地址inc DD ← D + 1加一dec DD ← D - 1减一neg DD ← -D取负not DD ← ~D取补add S , DD ← D + S加sub S , DD ← D - S减imul S , DD ← D * S乘div S , DD ← D ÷ S除xor S , DD ← D ^ S异或or S , DD ← D | S或and S , DD ← D & S与 继续阅读 >>


娄泽豪 17/06/02 11:36:21
数据传输指令的形式 指令效果描述 mov S, DD ← S 传送 movb 传送字节 movw 传送字 movl 传送双字 movq 传送四字 movabsq I, RD ← S 传送绝对的四字 需要注意的点 传送指令的两操作数不可均为内存位置。 movl在以寄存器作为目的时,会把寄存器的高位设为0 例子:分别执行movabsq $0xABCDEF0123456789, %r8和movl $0xFFFFFFFF, %r8d,此时%r8寄存器的值为00000000FFFFFFFF movq仅可以操作32位补码的立即数,而movabsq仅可以以寄存器为目的地 符号扩展/零扩展 零扩展 指令效果描述 movz S, RR ← (零扩展)S 以零扩展进行传送 movzbw 将做了零扩展的字节传送到字 movzbl 将做了零扩展的字节传送到双字 movzwl 将做了零扩展的字传送到双字 movzbq 将做了零扩展的字节传送到四字 movzwq 将做了零扩展的字传送到四字 继续阅读 >>


娄泽豪 17/05/30 20:51:40
数据格式 C声明 Intel数据类型 汇编代码后缀 大小(字节) char 字节 b 1 short 字 w 2 int 双字 l 4 long 四字 q 8 char * 四字 q 8 float 单精度 s 4 double 双精度 l 8 寄存器 主要用途 64位寄存器名 32位寄存器名 16位寄存器名 8位寄存器名 存储返回值 %rax %eax %ax %al 被调用者保存 %rbx %ebx %bx %bl 第四个参数 %rcx %ecx %cx %cl 第三个参数 %rdx %edx %dx %dl 第二个参数 %rsi %esi %si %sil 第一个参数 %rdi %edi %di %dil 继续阅读 >>


娄泽豪 17/05/30 19:57:12
程序中图的表示 邻接链表法 对于图G = (V, E),我们可以将之视为邻接链表的组合,该种表示方法在表示稀疏图(即边的条数|E|远远小于|V| ^ 2的图)时空间利用效率高而成为表示稀疏图,甚至是稠密图的主要方法之一。 对于上述例图,使用邻接链表的表示形式示意图如下: 不难从例子中总结出,对于图G = (V, E)来说,其邻接链表表示由一个包含|V|条链表的数组Adj组成,每个结点有一条链表。对于每一个结点u∈V,邻接链表Adj[u]包含所有与结点u之间有边相连的结点v,即Adj[u]包含图G中所有与u邻接的结点(也可以实现为链表中包含指向这些结点的指针)。 对于邻接链表表示而言,结点u的所有邻边的集合Adj[u]可以看做是图的一种属性。 邻接矩阵法 对于图G = (V, E),我们还可以将之表示为一个矩阵,该种表示方法在表示稀疏图时空间利用效率显然较低,但在表示稠密图时因为其实现形式较之邻接链表法难度显然降低,因此不失为一种好的选择。此外,邻接矩阵法的另一优势也体现在,对于任一边(u, v),邻接矩阵法表示可以在O 继续阅读 >>


娄泽豪 17/05/30 17:29:29
#include<iostream> #include<string> #include<map> using namespace std; const int MAXDATA = 100000; map<string, bool> vis; void shuffle(string &r, string &s1, string &s2) { r.clear(); string::iterator iter, jter; for (iter = s1.begin(), jter = s2.begin(); iter != s1.end(); ++iter, ++jter) { r += *jter; r += *iter; } } void update(string t, string &s1, string &s2) { s1.clear(); s2.clear(); size_t 继续阅读 >>


娄泽豪 17/05/25 19:17:23
#include<iostream> #include<algorithm> #include<string> using namespace std; int main() { string st; while (getline(cin, st)) { char max = *max_element(st.begin(), st.end()); for (auto i : st) { cout << i; if (i == max) cout << "(max)"; } cout << endl; } return 0; } 作者:hepangda 发表于2017/5/25 19:09:12 原文链接 继续阅读 >>


娄泽豪 17/05/25 19:09:12
#include<iostream> #include<queue> #include<cstring> using namespace std; const int MAXDATA = 1005; const int NOTV = -1; const int OPR[4][2] = { 0, 1, 0, -1, 1, 0, -1, 0}; struct d2Pos { int x, y, d; }; int X__, Y__, R__; char g[MAXDATA][MAXDATA]; int fire[MAXDATA][MAXDATA], joev[MAXDATA][MAXDATA]; queue<d2Pos> fireQ; d2Pos joe; void readg() { R__ = 0; while (!fireQ.empty()) fireQ.pop(); cin >> X__ >> Y__; for 继续阅读 >>


娄泽豪 17/05/25 18:59:36
#include<iostream> #include<string> using namespace std; string numlize(string n); int main(void) { string n1, n2; while (cin >> n1 >> n2) { if (numlize(n1) == numlize(n2)) cout << "YES" << endl; else cout << "NO" << endl; } return 0; } string numlize(string n) { int pos, i; pos = n.find('.'); if (pos >= 0) { for (i = n.size() - 1; i >= pos - 1; i--) 继续阅读 >>


娄泽豪 17/05/25 18:56:05