ZOJ 1011 NTA
来源:互联网 发布:mac 双系统无法切换 编辑:程序博客网 时间:2024/06/05 18:32
刚开始用c做, 各种链表队列,分配内存……然后就懵逼了,而且是用的从上往下遍历树的,做的有些麻烦,加之这个题的测试数据中存在非法数据,就是说如果k = 3, 本应该是只有a, b, c, 但是测试数据中存在超出k的转换元素,例如存在d….这对于限制严格,一切由程序员控制的c语言来说,就毫无疑问的段错误了,数组越界没得跑,毕竟我是malloc的内存,没有多余的地方。而且对于这种非法转换元素应该如何处理也不知道,简直坑……
说一下最后的解决吧,还是用了不熟的C++, 在借用了网上他人的思路自己实现了一遍,用了不一样的数据结构,然后倒在了STL身上(所以说不熟啊…),最终使用了较为简单的数组AC了,不过我一定会搞明白错误原因的!
注释掉的代码就是原本用的模板…
#include <iostream>#include <vector>#include <bitset>#include <string>#include <memory.h>using namespace std;#define SIG_MAX 15#define TRAN_MAX 10#define L_MAX 10typedef struct { int l; int r;}tranElement;vector<tranElement> tranTable[SIG_MAX][TRAN_MAX];int main(int argc, char* argv[]){ int n, m, k; int ntaNumber = 0; // vector< bitset<SIG_MAX> > isValid(4096); int isValid[4096][15]; int tree[4096]; while(true) { int a, b; int i, j; cin >> n >> m >> k; if(n==0&&m==0&&k==0) break; if(ntaNumber) cout << endl; ntaNumber++; cout << "NTA" << ntaNumber << ":" << endl; for(i = 0;i < SIG_MAX;i++) for(j = 0;j < TRAN_MAX;j++) { tranTable[i][j].clear(); } for(i = 0;i < n;i++) for(j = 0;j < k;j++) { while(1) { tranElement now; cin >> now.l >> now.r; tranTable[i][j].push_back(now); if(cin.get() == '\n') break; } } int L; while(true) { cin >> L; if(L==-1) break; int height = L+1; int number = (1<<height)-1; int cnt = 1; memset(tree, -1, sizeof(tree)); memset(isValid, 0, sizeof(isValid)); // vector<int> tree((1<<(L+2))-1, -1); // for(i = 1;i <= ((1<<(L+2))-1);i++) // isValid[i].reset(); for(i = 1;i <= number;i++) { char c; cin >> c; if(c == '*') tree[i] = -1; else tree[i] = c - 'a'; } // judge int pos; for(pos = ((1 << (L + 2)) - 1);pos > 0;pos--) { int tranEle = tree[pos]; if(tranEle == -1) { int sig; for(sig = 0;sig < n;sig++) if(sig >= n-m) isValid[pos][sig] = 1; } else { int sig; for(sig = 0;sig < n;sig++) if(tranTable[sig][tranEle].size()) { vector<tranElement>::iterator iter = tranTable[sig][tranEle].begin(); while(iter != tranTable[sig][tranEle].end()) { if(isValid[pos*2][iter->l] && isValid[pos*2+1][iter->r]) { isValid[pos][sig] = 1; break; } iter++; } } } } if(isValid[1][0]) cout << "Valid" << endl; else cout << "Invalid" << endl; } } return 0;}
0 0
- ZOJ 1011 NTA
- zoj 1011NTA
- ZOJ 1011 NTA (DFS)
- zoj 1011 NTA
- ZOJ 1011 NTA
- 浙大ZOJ 1011 NTA问题解决
- zoj 1011 NTA
- ZOJ 1011 NTA(二叉树+vector)
- zoj1011 NTA
- NTA算法讲解
- NTA算法讲解
- NTA算法讲解
- NTA文档保密硬办法
- zoj 1011
- ZOJ 1011
- NTA终于发了第一个release
- NTA-文档保密的“硬”办法
- NTA-ERP远程接硬件解决方案
- hdu5437Alisha’s Party
- tomcat7 配置https
- 解决在Fragment中启动Activity时传递请求码的问题
- IO流
- 使用slf4j和logback输出日志到控制台
- ZOJ 1011 NTA
- JSP页面中的pageEncoding和contentType两种属性
- MFC中利用Opencv与C++抓取摄像头进行人脸识别(Mat)
- Virtual machine steal BlueTooth from Host(Mac)
- Linux系统的7个运行级别Runlevel
- linux硬盘挂载
- 处理哈希冲突的开链法(哈希桶)
- Rxjava的Observable创建操作符介绍
- Window编译libharu及依赖库zlib和libpng