摘要:
要求输出每个单词在不产生歧义的情况下的最短前缀,直接构造出一颗字典树就可以了。先执行插入操作,对每一个单词经过的路径都进行一个自增的操作。再一次搜索每一个单词,当其遇到覆盖次数为一,或者是到了单词末尾就输出。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int N, idx;char s[1005][25], rec[25];struct Node{ int cnt, ch[26];}e[30000 阅读全文
摘要:
这题用匈牙利算法是无论如何也过不了的,边太多了。利用简单的贪心规则,我们每次选取最优的匹配方案来进行匹配,在划分上我们采用工资要求为负值的去寻找工资要求为正值的人。对于一个要求工资比他低的男人来说,其实就是优先最有钱的男人,因为能与之匹配的女生是最多的,在选取女生的时候,就选择满足要求下工资最高的女生,因为这种女生最难满足要求,这一对配对对后面的匹配来说是最优的。女生同理。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#define MA 阅读全文
摘要:
该题就是简单的二维树状数组,保留一份棋盘的最新状态即可,树状数组里面就只保留在原有基础上增加或者减少的某一种饺子的数量。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;char op[5];char G[1050][1050];int cc[1050][1050];// 数组中存储韭菜饺的数量,白菜饺的数量通过总数量减去韭菜饺来求void init(){ int k = 0; // 定义韭菜为1,白菜为0 for (int i = 1; i <= 阅读全文
摘要:
由于只有最多16种组合情况,所以就直接暴力枚举求解。这里题目有个要求就是按照字典序相对较小的输出规则输出,那么我们可以想到在兴趣数相同的情况下要不要去更新最优值,这就牵涉到我们刚开始的时候求解出来的解是否一定是字典序最小的,或则最后求解出来的解就是字典序最小的,我是采用压缩后的二进制数的最高位代表最小的兴趣,所以从最高位通过自减操作能够保证每次得到的该兴趣数的第一个解都是字典序最小的。#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>using nam 阅读全文
摘要:
一个网格中的图形,如果其面积只取方格的整数倍的时候,那么我们有如下公式。设面积为Area,多边形内部的整点个数为OnEdge,多边形轮廓线上的整点个数为InSide,那么有公式 Area = OnEdge / 2 + InSide - 1代码如下:#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;int main(){ int T, N; long long int ret, S; scanf("%d", &T); while (T-- 阅读全文