首页 > TAG信息列表 > 1e6
交互题
1、Dragon Balls 暴力求解,把每次可能的值都求出来,然后逐个比较。 #include<bits/stdc++.h> #define int long long int using namespace std; int x, n; typedef pair<int, int> pii; vector<pii> vet; signed main(){ cin >> n; while(n -- ){ cout <2022 ccpc 广东省赛 F 望舒客栈的委托
当成大模拟写了,就是开了四个set辅助 今天才知道set的find函数是logN的,因为里面封装了红黑树(喵喵喵? re了一发,又t了一发 理论上模拟的时间复杂度不会t,所以猜测是因为set没写好,没找到东西,卡了 re了应该是数组没开够 修修改改终于补了队友赛时过的题,码量还是不够,继续努力啊 #include<openlayers3 getJson格式
<!DOCTYPE html> <html> <head> <title>GeoJSON</title> <link rel="stylesheet" href="http://openlayers.org/en/v3.13.0/css/ol.css" type="text/css"> <script src="http://opeabc246_d 2-variable Function
考虑到i不大于1e6,而使得f(i,j)大于n的最小的j是随i的增加单调减的,因此枚举即可。 // // Created by vv123 on 2022/4/2. // #include <bits/stdc++.h> #define f(i,j) i*i*i+i*i*j+i*j*j+j*j*j using namespace std; typedef long long LL; int main() { LL n, ans = 1e18, jZROI2017 做题笔记
B2064 斐波那契数列 递归函数的写法应该是: 1 int f(int n) 2 { 3 if (n <= 2) return 1; 4 return f(n - 1) + f(n - 2); 5 } 改成非递归的手工栈需要储存函数参数、时间戳和答案,比较恶心但也的确是 C++ 递归函数内部代码的形式。 1 const int N = 1e6 + 10; 2 int s构造
CF1270G Subset with Zero Sum:给定长度为n (1e6) 的数列a1,a2,a3……an(),找到这些数的一个和为0的非空子集。P4913 二叉树深度
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int N = 1e6 + 10; 6 7 int ok = 0; 8 9 int n; 10 struct node 11 { 12 int l, r; 13 } t[N]; 14 15 void dfs(int i, int s) 16 { 17 if(i == 0) return; 18 ok = max(ok,P1091 [NOIP2004 提高组] 合唱队形
原来错一道题可能不止错在少剪枝,还可能这压根就不是搜索题 题目传送门 第一反应:这不每个点左搜一遍右搜一遍然后比大小吗 点击查看search #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int n,a[10010],ansl=1e6,ansr=1e6,ans=AcWing 2041.干草堆
题目传送门:https://www.acwing.com/problem/content/2043/ 解题思路:数据范围1e6,不是很大,差分即可,线段树都用不上。 通过差分,进行区间加高指令;然后遍历一边,前缀和还原数组;接着来个sort排序,最后输出中间值即大功告成。 代码如下: #include<iostream> #include<algorithm> #include<快速排序。
#include <bits/stdc++.h> using namespace std; const int N=1e6+10; int n; int q[N]; void quick_sort(int q[],int l,int r) { if(l>r)return;//排序完毕,返回。 int x=q[l],i=l-1;j=r+1;//设置一个x将数组中的数值分为两个部分,设置i,j初始分别-1,+1防止越界。 while(素数筛选法(埃氏筛 欧拉筛)
质数筛选法 文章目录 质数筛选法 前言一、埃氏筛 O ( n l oCF165E Compatible Numbers
题面 solution 若 \(a\& b = 0\),设 \(c\) 为 \(a\) 中去掉几个 \(1\)。 则 \(c \& b = 0\)。 直接 \(O(n)\) 递推就好了。 \(f[i | (1 << j)] = f[i]\) #include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 5; int read() { int x = 0, f1013 Battle Over Cities (25 分)——段错误分析
题目链接 分析 思路就是并查集求连通块,答案等于连通块的数量-1 段错误是因为M的范围大于1e5,我把数组开到1e6就能过 AC代码 #include<bits/stdc++.h> using namespace std; const int N = 1e6+9; int p[N]; int find(int x) { if(x!=p[x]) p[x]=find(p[x]); return p[x];Command Sequence-题解
这个题有很多做法,我只解释我的做法,首先我们知道U-D,L-R是相互抵消的,然后找这一个序列里面多少个区间是抵消回到原点的 那我们这么想,把U-D看成(1,-1),L-R看成(1e6,-1e6),这样就可以转换成一个一维数组区间和为0的个数,为什么是看成(1e6,-1e6) 是因为题数据n的范围最大是1e5,假如把L-R看CSUST 简单数学题 题解(质因子分解+并查集)
题目链接 题目大意 注意数据范围,因为区间范围最多\(1e6\),所以只要考虑\(1e6\)以内的质因子即可 然后用并查集维护一下集合即可 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; #define要变强,不空喊,ak题目,继续向前。(背包DP优化+bitset应用)
传送门 题意: 题解:分组背包复杂度O(1e10),bitset优化O(1e10/32) bitset深入学习:C++ bitset 用法 代码: /* https://ac.nowcoder.com/acm/contest/16806/C: 要变强,不空喊,ak题目,继续向前。 1.数据范围较小,背包问题,复杂度1e2*log(1e2)*1e6 emmm写完才发现不是多重背包,而是分组背包,UVA10125 Sumsets
Sumsets 给定数集 \(S\),求互不相等的四个数满足 \(a+b+c=d(a,b,c,d\in S)\) 中 \(d\) 的最大值。 转化为 \(a+b=d-c\),然后是套路的 meet in the middle。 使用手写 Hash_Table 可以少一个 log,但是常数略大。 #include<cstdio> #include<cstring> #include<algorithm> #include<cP1296 奶牛的耳语
先将所有奶牛的坐标从小到大排序,然后通过双指针(也可以二分)查找第一个超出第\(i\)头奶牛交流范围\(d\)的奶牛的坐标\(r\),同时答案累加上\(r-i-1\)(和第\(i\)头奶牛范围不超过\(d\)的奶牛数,减一是除去第\(i\)头奶牛自身)。 const int N=1e6+10; int a[N]; int n,d; int main() {活动调度
假设要用很多个教室对一组活动进行调度。我们希望使用尽可能少的教室来调度所有的活动。 输入要求: 第一行为活动的个数 N(1<=N<=1 000 000) 。 接下来 N 行为 Si 和 Fi(0<=Si<Fi<=2 000 000 000) ,分别代表第 i 个活动的开始时间和结束时间。活动 i 的区间段为 [Si,Fi) 输出要求:AcWing 790. 数的三次方根
刚开始看到这个还是有点懵的,后来说是二分,我就想到了浮点二分,浮点二分都是基础的基本知识,我的栏目也有,有兴趣可以关注一下,有模板。 最后说一下浮点数的比较(两个浮点数相等是用相差是否小于eps) eps设题目要求的精度+2。本题给了6,就设eps=1e-8 直接上代码吧。 #include<iostrea洛谷 P4391 [BOI2009]Radio Transmission 无线传输(KMP)
假设字串长度为 x,字符串从 1 开始计数 next[1]=next[2]=……next[x]=0 next[x+1]=1 next[x+n]=n 发现从 x+1 位置开始,next 数组逐渐递增 1 所以答案为 n-next[n] const int N=1e6+5; int n,m; int i,j,k; char a[N]; int f[N]; void getfail(char *s)矩阵乘法
nm矩阵 与mk矩阵相乘 结果是n*k的矩阵 那是如何得到的呢? 我们设a[100][100],b[100][100],c[100][100] a是第一个矩阵,b是第二个,c是运算后的矩阵; c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+…+a[0][n-1]*b[n-1][0]; c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+…+a[0][n-1]*b[n-给定数n,求n!的p进制下有多少个后导零
题目描述 这是一道很简单的中学数学题: 给定数n,求n!的p进制下有多少个后导零。非常简单。 为了简化问题,p保证为素数。 输入描述: 第一行给定一个数t,表示有t组输入 接下来t行,每行给定两个数n,p;意义如题所示; 输入范围:(t<=1000) (1<=n<=1000000 ) (2<=p<=1000000) 输出描述:基础DP
https://vjudge.net/contest/409169#problem/A A - Max Sum Plus Plus 题意:将一个长度为n的序列,分成m段不相交叉的子段,使得他们的和最大。 解题思路:状态dp[i][j]表示前j个数分成i组的最大值。 动态转移方程:dp[i][j]=max(dp[i][j-1]+a[j],max(dp[i-1][k])+a[j]) (0<k<j) dp[i][j-1]「一本通 1.1 练习 3」线段
题目大意 题目:线段 大致题意: 与 活动安排 相同,唯一不同的是换了数据范围。 思路解析 数据范围增大并不影响我们之前的解法,因为是O(nlogn)的解法,1e6的数据能过得去。 程序注释 #include <iostream> #include <algorithm> using namespace std; const int N=1e6+5; int n,ans; s