摘要: 题目代码#include #include using namespace std;int candys[100010];int left1[100010];int right1[100010];int main() { //freopen("testcase.txt", "r", stdin); int n; while(scanf("%d", &n) != EOF) { for(int i = 0; i candys[i-1]) left1[i] = left1[i-1] +1; else ... 阅读全文
posted @ 2014-03-02 21:48 SangS 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给定两个正整数a,b(1#include #include using namespace std;int gcd(int x, int y) { if(x == 1 || y == 1) return 1; if(x == y) return x; if(y > x) swap(x,y); if((x&1) && (y&1)) { return gcd(x-y, y); }else if((x&1) &&(!(y&1))) { return gcd(x, y/2); }else... 阅读全文
posted @ 2014-03-02 21:46 SangS 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 题目描述:已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生。求,至少需要几张货币才能完成支付。如,若支付价格为12元的物品,最少需要一张10元和一张2元,即两张货币就可完成支付。思路1. 先用完全背包的思想考虑了一下, 甚至还计算2^40 个 int 相当于多大空间2. 然后考虑到一个优化, 100 元以上的直接用 100 付就好了嘛, 然后... 这又是道水题代码#include #include using namespace std;int money[10]; void init() { .. 阅读全文
posted @ 2014-03-02 21:40 SangS 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 题目描述:输入一个N(N#include #include using namespace std; vector matrix[12]; void dfs(int i, int n) { if(i == n-1) return; int maxVal = matrix[i][i], maxLine = i; for(int j = i+1; j < n; j++) { if(maxVal < matrix[j][i]) { maxVal = matrix[j][i]; maxLine = j; ... 阅读全文
posted @ 2014-03-02 21:37 SangS 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 题目给定一个有向图, 判断其是否是一棵树要求 (1) 除了根节点外, 每个节点只有唯一的前驱 (2) 从根节点出发, 到任何节点有且只有一条路径思路1. 要求(1) 可以通过记录每个节点的前驱决定, (2) 可以从根节点 dfs, 搜不到的点不是树, 搜到的点在(1)符合条件的情况下, 只有一条路径2. 具体实现的话可以用 map[node*, node*]3. 最终使用的并查集, 使用并查集的过程要注意几个判断条件3.1 (1, 2) (2, 1) 不是树, 判断条件是 if(ed == find(st)) 假如经过寻找, 一个节点的父亲还是他自己, 说明出现了环3.2 一个节点不能被... 阅读全文
posted @ 2014-03-02 11:57 SangS 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给定平面上的n个点,任意做一条直线,求至多能有几个点恰好落在直线上。思路1. Leetcode 上原题. 解法是先确定一个点, 然后计算其他点相对于这个点的斜率2. 这道题需要注意多点重合, 斜率为无穷大的情况代码 未通过九度测试#include #include #include using namespace std;int xs[200], ys[200];int main() {freopen("testcase.txt", "r", stdin); int pointnum, x, y; while(scanf("%d&qu 阅读全文
posted @ 2014-03-02 11:50 SangS 阅读(330) 评论(1) 推荐(0) 编辑
摘要: 题目描述:给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈。要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一个空栈。求符合条件的操作序列种类。例如,4个操作组成的操作序列符合条件的如下:入栈,出栈,入栈,出栈入栈,入栈,出栈,出栈共2种。思路1. Leetcode 上有道类似的题目, 那道题求得是括号的总类, 当初用的是搜索法2. 搜索法超时, 分治法没想起什么好办法, 动规没头绪3. dp[i][j] (i>=j) 表示入栈 i 次出栈 j 次 的种类数4. dp[i][j] = dp[i-1][ 阅读全文
posted @ 2014-03-02 11:46 SangS 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 题目根据手机按键上的对应关系将字母转成数字, 简单模拟题总结1. scanf("%s", input); 不需要加上 &2. 字符串的终结符是 '\0'3. scanf 和 printf 打印的都是 char*, 不能是 int*代码#include #include #include using namespace std;int map[50];void init() { for(int i = 0; i < 18; i ++) { map[i] = i/3 + 2; } map[18] = 7; for(int i = 19; i < 阅读全文
posted @ 2014-03-02 11:44 SangS 阅读(208) 评论(0) 推荐(0) 编辑