要求最后乘积为质数,则必须为prim*1*1*...*1 e为正整数(当时以为是自然常数一直卡着做不出来) 如果从1往左右找prim,可行但是复杂,所以从prim往左右找1的个数 最后ans+=(pre[i]+1)*(suf[i]+1)-1 #include<cstdio> #include<cstdlib> #include<vector> #include<cmath> #include<algo
给定m个长度为n的序列 每个序列选一个数求和,求最小的n个 用堆来模拟搜索的过程 关键在于状态不重复 朴素写法: 用map来维护m个指针,判重 但是空间复杂度是\(mn^2\)的会爆 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #in
n个数,每个数可以/2若干次,最后转换为1-n,说明每个数和最后的目标一对一 一个数一开始大于n,则必须要操作至小于等于n,然后存到cnt[i] 按照n->1的顺序看,如果cnt[i]==0,则必没有数可以转化为i 如果cnt[i]>1,则只需要一个转化为cnt[i],剩下的所有已经转化为i的数,继续操作至i/2 #include<
扫雷游戏是一款十分经典的单机小游戏。在 nn 行 mm 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。
题目大意 一个 \(m\) 个点的环,有 \(n\) 条线段,可覆盖在环上 \([l_i,r_i]\) 的部分,且线段不会互相包含,对 \(1\le i\le n\) 问强制选择线段 \(i\) 时,最少选择多少条线段可以覆盖整个环。 保证 \(1 \leq n\le 2\times 10^5,m<10^9\)。 解题思路 对于环,直接断环为链,变为线段覆盖问题。
题目描述 完成一个对候选人得票的统计程序。假设有3个候选人,名字分别为Li,Zhang和Fun。使用结构体存储每一个候选人的名字和得票数。记录每一张选票的得票人名,输出每个候选人最终的得票数。结构体可以定义成如下的格式: struct person { char name[20]; int count; }lea
#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int N=1e6+10; int read() { int x=0,f=0,c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=1;
getchar的是直接读入1 bity的数据转化为插入char类型的,所以我们可以通过它把输入转成整型,效率会高很多 inline ll read(){ int x=0,w=1;char c=getchar(); while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();} while(c<='9'&&c>='0
发现问题 刷题时,一个字符矩阵输入,scanf("%c",&g[i][j]),发现g[0][0]是空白。原来是忘了C的基础知识,getchar()和scanf("%c",&a)都会吸收空白字符 相关知识 scanf输入(除开占位符是%c的情况): abc[回车]后,遇到回车结束,但是回车还留在输入流中。下一个scanf在输入前碰到回车,会自动把回车
UVA1619 感觉不错 Feel Good 链接 UVA1619 感觉不错 Feel Good (luogu.com.cn) 题目大意 给出正整数 \(n\) 和一个长 \(n\) 的数列,要求找出一个子区间,使这个子区间的数字和乘上子区间中的最小值最大。输出这个最大值与区间的两个端点。 思路 用单调栈处理出每个数作为最小值的区间
[USACO06NOV]Bad Hair Day S 洛谷题面 题目大意: 给定有 \(n\) 个数的数组 \(a_i\),找到在 \(i\) 之后的第一个大于 \(a_i\) 的数 \(a_j\),那么 \(a_i\) 能造成 \(j-i\) 贡献。求总贡献。 思路: 倒着跑单调栈。 代码: const int N = 8e4 + 10; inline ll Read() { ll x = 0, f = 1;
给定一张无向图 求S->T经过K条边的最短路是多少 对于形如 \(A(i,j)=opt(A(i,k)\ opt\ B(k,j)\)的形式 可以考虑用矩阵乘法来解决 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define ll long long using namespace std; const int N=110;
给定n个不等式 判断是否有逻辑错误 floyd传递闭包问题 #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int N=1010; int read() { int x=0,f=0,c=getchar(); while(c<'0'||c>'9'){i
1.相对于scanf,gets函数不仅代码更简洁,还能输入空格,值得一提的是,在最后敲出来的换行符会从缓冲区中取出,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着如果前面使用过gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了。 例如: #include <stdio.h> int main(
同样的这次也出现了新的错误 自己一行行调式之后发现有的时候B会变成‘\n’; 比如说在输入5的时候执行2次就return 0了 这就很奇怪了,后来也是突然想到用getchar清一下,然后成功AC #include<stdio.h> #include<string.h> char a[60][60]; /* 5 A B C D E */ int main() { memse
题目描述 实现字母的大小写转换。多组输入输出。 输入描述: 多组输入,每一行输入大写字母。 输出描述: 针对每组输入输出对应的小写字母。 示例1 输入 A B 输出 a b 思路:当看到这个题时,通过“大小写转换”可以立马反应出,通过ASCII 码进行转换,即为:大写字母+32=小写字
abc231g \(\frac{1}{n^k} \sum\frac{k!}{\prod b_i!} \prod (a_i+b_i)\),其中 \(\sum b_i=k\) 构造生成函数 \(f_i=\sum \frac{a_i+j}{j!}x^j=e^x(a_i+x)\),欲求式为 \(k![x^k]\prod f_i=k![x^k] e^{nx}\prod (a_i+x)\) 预处理 \(g_i\) 为任选 \(i\) 个乘积的和,原式为 \(\frac{
字符数据的输入和输出 首先注意,C语言的程序包括执行部分和声明部分。其中执行部分由语句组成,所以声明部分是不能够算语句的。 在之前的文章中,我们在讲字符型常量时提到过,putchar()方法可以输出字符数据并且只能输出一个字符; 其中int putchar(int ch);是可以输出整型变量ch的。也
求最大公约数 int gcb(int a,int b) { if(b==0) return a; else return gcb(b,a%b); } 对于浮点数 float double ++,只会对整数的部分加1,不会对小数点后的值+ int main() { float x=12,25; x++; printf("%d",x);x=13.25 } 取模运算只能对整型进行取模(char, sh
两个月没打cf了,好不容易打一次,写个题解( 这场C题因为一个小bug 调了好久 还WA了三发,加上考场以为是cf赛制 心态持续爆炸 好在5min想出D题 并且在结束前2min写出来,最后结果还算满意 A. Construct a Rectangle 2s Problem 给定三个长为 $ l_1,l_2,l_3(l_1,l_2,l_3\in \mathbb{N}^*) $
摘自:C语言输入单个字符屏蔽回车符的四种解决方法_weixin_33834137的博客-CSDN博客 C语言的 scanf()/ getchar() 函数在接收输入单个字符时会把上一次输入的回车符号当做这次输入的字符,造成无法正确的识别输入字符数据。 可用以下四种方式回避: 在scanf()中使用'\n'屏蔽回车符号。
初学树分治的学习笔记。 题目 分治本质上都是一样的,就是要把原问题分割成几个规模更小的问题分别求解然后再合并上去。而由于树它本身具有很强的递归特性(笼统的说就是树的部分还是树),于是就使得树上分治成为可能。 树分治一般遵循以下步骤: 第一步,把树中所有节点全部找出来,然后把它
在CSDN刷每日一题的时候,发现四个答案没一个对的,不知道该咋选了
二分 对于一个存在单调性的函数,我们要枚举满足条件的最小/最大值,我们通过枚举中间值缩小范围来定位。 while(l<r) { mid=(l+r+1)>>1; if(check(mid)) l=mid; else r=mid-1; } 三分 对于一个存在单峰/单谷性的函数,我们可以通过枚举两个端点通过比较大小缩小范围求出峰
分析 根号分治题。 发现 \(p\) 是单增的,且每次至少增加 \(k\)。所以如果 \(k\) 很大,我们直接暴力跳很少的次数就能跳出去,如果确定了一个 \(k\) 值,我们可以倒序 \(O(n)\) 处理出每个位置作为起点需要跳多少次才能跳出。 如果将前后两个综合起来,在 \(k\) 大于 \(\sqrt{n}\) 时直接暴