摘要:
【题目链接】 http://poj.org/problem?id=3080 【题目大意】 求k个串的最长公共子串,如果存在多个则输出字典序最小,如果长度小于3则判断查找失败。 【题解】 将所有字符串通过拼接符拼成一个串,做一遍后缀数组,二分答案,对于二分所得值,将h数组大于这个值的相邻元素分为一组, 阅读全文
摘要:
A题求给出映射的反射,水题 B题,三进制的减法 C题题意,更改一个数字,使得数列总和最小 D题给出八个点,判断是否能够分成两组,使得第一组四点构成正方形,第二组四点构成矩形 构成矩形的判断方式是,对角线长度相等,并且中点重合,构成正方形的判断方式是已构成的矩形相邻两边长度相等 对于八个点利用状态压缩 阅读全文
摘要:
A题题目意思很简单,问一种拨号的方式(拨号手势)是不是能拨出唯一的号码(例如253就不是唯一的,因为586也是可以的) 记录电话上每个格子上下左右是否还有格子,一个拨号手势是唯一的当且仅当,所拨号码的所有格子在同一个方向不同时有格子相邻。 那么直接mark,判断一下即可: B题的意思是城市之间两两可 阅读全文
摘要:
A题 题目大意:给出一棵树,一开始节点值均为0,先要求完成在线操作:将某子树所有节点值取反,或者查询某子树总点权。 题解:很基础的线段树题,既然两个操作都是子树操作,那么就先树链剖分一下,将子树操作转变成线段树上的区间操作,区间翻转操作就等同于区间长度减去区间总权值,码量适中,水过。 B题 题目大意 阅读全文
摘要:
A题题目大意,一个给定矩形,每次一刀切出一个正方形,问可以切几刀 显然GCD改改就好。 一看数据范围,这不是C++入门练习题了么?那么GCD也懒得写了,于是噼里啪啦A了 为什么是GCD,题解的图很棒地解释了这个 发现以后这之类的问题说明都可以看看这张图。 暴力的代码: GCD代码: B题题意:普通的 阅读全文
摘要:
A题意思是,给出两个数列,求一个区间,使第一个数列的区间或和第二个数列的区间或的和最大,输出最大和 很显然,或运算会使得答案越运算越大。所以,直接全部或起来,相加就是答案。 = =打cf的时候自动脑补成异或,浪费了好多时间,超出int情况一开始没有考虑,于是加一次重交。 #include <cstd 阅读全文
摘要:
一开始接触背包问题,总会有些困扰,无法完全理解,或者说不断地忘记所谓的公式,特神说分享,可以让许多人少走弯路,我觉得颇有道理,其实我想做的,只是努力让让算法变得看上去简单易懂一些,因为我也曾是个迷惘无助,没有方向的初学者。 才疏学浅,言语颇显幼稚,如有纰漏请指教。 允许我摆脱背包单调的题面,给题目一 阅读全文
摘要:
A.Winner 题目大意:一些人在玩游戏,给出n次某人获得的分数,现在请计算出胜者,如果不止一个最高分,则取最先达到该分数的人。 题解:模拟得分过程,首先计算出最高分,然后获取先到达或超过最高分的人。#include #include #include #include #include #i... 阅读全文
摘要:
A.Theatre Square 题目大意:有一个长宽为m和n的广场,用边长为a的正方形去铺盖,问铺满最少需要多少正方形 题解:题目分解为用长度为a的线条分别去覆盖长度为m和n的线条,计算两者的乘积就是答案,在计算时注意整除的情况以及需要开long long防止相乘时范围越界。#include ... 阅读全文
摘要:
//字典树//定义:注意任意字符需要130,01字典树只需要2struct Node{int last; int sum; int son[26];}trie[1000000];//插入:last参数标记在插入子串的末尾,sum记录插入时经过该节点次数void insert(char *s){ ... 阅读全文
摘要:
题目大意:题目给出n(n #include #include using namespace std;int n,x[20],y[20],fix[20];double dp[1=1e9)return -1; return ans;} int main(){ while(scanf("%d... 阅读全文
摘要:
题目大意:有个N*N( 3#include #include #define rep(i,n) for(int i=0;i>1))continue; if(s[j]&(s[k]<<1))continue; dp[i][j]=max(dp[i][j],dp[... 阅读全文
摘要:
LL gcd(LL a,LL b,LL &x,LL &y){ if(b==0)return x=1,y=0,a; else ex=gcd(b,a%b,y,x); y=y-(a/b)*x; return ex;} 阅读全文
摘要:
题解:先判断第一个是否负号。如果是把第一个符号拿掉之后判断后面的长度是否#include char s[150],ss[150];int A,B;long long a,b;using namespace std;int main(){ while((gets(s)!=NULL)&&(~sca... 阅读全文
摘要:
#include #include using namespace std;map a,b;int t[105],x,n;int main(){ while(~scanf("%d",&n)){ int flag=1; a.clear(); b.clear(); ... 阅读全文
摘要:
题解:前缀和计算统计。#include #include using namespace std;typedef long long LL;LL ans; char s[100010];int T,k,t[200],i,j,n;int main(){ scanf("%d",&T); wh... 阅读全文
摘要:
#include int t,n,a[10];int main(){ while(~scanf("%d",&n)){ int flag=0; for(int i=0;i0)flag=1; if(flag==0){puts("-1");continue;... 阅读全文
摘要:
#include int main(){ int n,m,x,y; while(~scanf("%d%d%d%d",&n,&m,&x,&y)){ if(2*x==n&&2*y==m)puts("YES");else puts("NO"); }return 0;} 阅读全文
摘要:
题解:筛出约数,然后计算即可。#include #include typedef long long LL; LL a1[1000005],a2[1000005],x,y,k,g;int cnt1,cnt2,T;LL gcd(LL a,LL b){if(b==0)return a;else retu... 阅读全文
摘要:
题解:直接计算即可。#include #include using namespace std;int main(){ int T; scanf("%d",&T); while(T--){ int a,b,c; bool flag=1; scanf("%... 阅读全文