随笔分类 - 思维
摘要:题意:给一个字符串,问形如a……a/ /b……b/ /a……a的子串最大长度 题解:设三个状态a,ab,aba分别表示对应长度。因为每段长度可以为0,所以后一个状态的包含前一个状态。每次更新最大长度,最终的aba即为答案
阅读全文
摘要:题意:给你一颗树,问你最少添加多少边使其能成为二分图。 题解:首先理解一下二分图 https://en.wikipedia.org/wiki/Bipartite_graph。我们观察树,父亲与儿子肯定属于二分图不同的集合,父亲与儿子的儿子肯定属于同一个集合。而且集合的任意一个元素肯定与另一个集合的每
阅读全文
摘要:/* 输入一堆数,如果是两个数并且个数相同就输出yes和这两个数 否则输出no */ #include using namespace std; const int maxn = 1010; int num[maxn] = {0}; int a[maxn] = {0}; const int inf =0x3f3f3f3f; int main() { int n; int sum...
阅读全文
摘要:1 /* 2 从顶部发射石头,按照碰壁反弹的运动路线问能不能击中底部的某个位置。 3 计算落点,飞行轨迹周期为2*(w-1),所以直接将高度视为h=h%(2*w-2),然后如果高度 4 不大于w 则落点即为高度,否则落点在2*w-h的位置。 5 */ 6 #include 7 using namespace std; 8 int main() 9 { 10 int n...
阅读全文
摘要:1 //模拟题 2 #include 3 using namespace std; 4 int main() 5 { 6 int n; 7 scanf("%d",&n); 8 while(n--) 9 { 10 char a[1010],b[10]; 11 scanf("%s%s",a,b); 12 ...
阅读全文
摘要:1 /* 2 a or c = b,已知a和b,求c可能有多少种值。 3 对比二进制每一位,如果A为1,B为0,则不可能,如果A为1,B为1,则C的这一位可以 4 是0也可以是1,所以结果乘以2,其他情况C的这一位必须和B一致,所以结果不变。 5 */ 6 #include 7 using namespace std; 8 const int mod=1000000007; ...
阅读全文
摘要:1 /* 2 用1-9填满方格,每个数一次,相邻的数的位置也必须相邻 3 已经填好一些数,求填剩下数的方案数。 4 直接把剩下的数全排列,然后判断即可 5 */ 6 #include 7 using namespace std; 8 bool v[10]; 9 bool vis[5][5]; 10 char ma[5][5]; 11 int cop[5][5]; 12 int...
阅读全文
摘要:1 /* 2 对于数组的每个元素,找到它右边的第一个比它大的元素 3 根据数组元素内容建立索引,有序记录a的每个值的所有出现的位置,然后对于每个a, 4 遍历所有大于a的可能的值,每个值用二分搜索找到当前位置右边的最小的出现位置, 5 (直接遍历会超时) 6 然后这些位置中取最小值即为结果所在的位置。 7 */ 8 #include 9 using namespace std...
阅读全文
摘要:1 ///水题 2 #include 3 using namespace std; 4 int main() 5 { 6 int n,m; 7 scanf("%d%d",&n,&m); 8 if(m%n==0) 9 printf("YES\n"); 10 else 11 printf("NO\n"); 12 } ...
阅读全文
摘要:1 /* 2 证书可以每次批量买a个,现在需要x个,问至少要买多少个。 3 把所有a排序,然后对于每个x二分搜索不小于x的最小的a,然后输出即可。 4 */ 5 #include 6 using namespace std; 7 const int maxn=1e5+5; 8 int n,a[maxn],m,x; 9 int main() 10 { 11 cin>>n...
阅读全文

浙公网安备 33010602011771号