Now coder
穷源溯流
路很长,尽管走便是。
展开
-
洛谷 P3166 [CQOI2014]数三角形(gcd+组合计数)
题目描述 给定一个 N×MN\times MN×M 的网格,请计算三点都在格点上的三角形共有多少个。注意三角形的三点不能共线。 输入格式 输入一行,包含两个空格分隔的正整数 MMM 和 NNN 。 输出格式 输出一个正整数,为所求三角形数量。 输入输出样例 输入 #1 2 2 输出 #1 76 说明/提示 数据规模与约定对于全部的测试点,保证 1≤N,M≤10001\le N,M\le10001≤N,M≤1000。 const int N=1e6+5; //int n.原创 2021-05-23 16:45:20 · 500 阅读 · 0 评论 -
牛客NC19485 Utawarerumono(gcd)
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 1048576K,其他语言2097152K 64bit IO Format: %lld题目描述算术是为数不多的会让Kuon感到棘手的事情。通常她会找Haku帮忙,但是Haku已经被她派去买东西了。于是她向你寻求帮助。 给出一个关于变量x,y的不定方程ax+by=c,显然这个方程可能有多个整数解。Kuon想知道如果有解,使得p2*x2+p1*x+q2*y2+q1*y最小的一组整数解是什么。为了方便,你只需要输出p2*x2...原创 2021-05-22 13:29:15 · 271 阅读 · 0 评论 -
牛客练习赛34 F.little w and Discretization(主席树)
const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz,minn; void update(int x){ sz++; minn=x; } }t[N<<5]; int root[N],tot=0; int b[N],len;void push_up(in...原创 2021-04-15 17:22:19 · 248 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) M.Stone Games(主席树)
const int N=1e6+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; ll sum; }t[N*40]; int root[N],tot=0,len; vector<int> v; int x,y;void update(int &x,int y,int pos,int l,int ...原创 2021-04-11 09:36:15 · 459 阅读 · 0 评论 -
2019牛客国庆集训派对day2 C.Just h-index(主席树+二分)
const int N=3e5+5; int n,m,_; int i,j,k; int a[N]; struct Node { int l,r; int sz; }t[N<<5]; int root[N],tot=0;void update(int &x,int y,int pos,int l,int r){ x=++tot; t[x]=t[y]; t[...原创 2021-04-08 18:33:11 · 711 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)Xor Transformation
给出两个数 a,b ,并利用最多 5 次操作使 a 变为 b每次操作可以选择一个数 x (0<x<a) ,a=a^x,输出每次 x 的值int main(){ ll a,b; while(~sll(a)){ sll(b); puts("2"); ll ans=a^b; ll res=1; while(res*2<=ans) res*=2; printf("%ll..原创 2021-03-20 23:40:20 · 230 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)D.Fight against involution
给出 n 个人的要写字数的区间 [L,R],将这 n 个人的 R 值进行排序 ,R 值最高的排第一,以此类推,每个人的排名不能低于现在的排名,现在要求所有人的所写字数最小,问所有人最小写多少const int N=2e5+5; int n,m; int i,j,k; struct Node { ll l,r; bool operator<(const Node &o)const{ if(r==..原创 2021-03-20 23:38:21 · 326 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)Stone Game
有 1 个石子的有 a 堆,2 个石子的有 b 堆,3 个石子的有 c 堆,每次合并任意两堆石子,花费为 (x%2)*(y%2),x y 为石子的个数,问将所有的石子合并成一堆石子之后的花费最小是多少将 1 2 先合起来,然后看 1 剩下还是 2 剩下,再用剩下的与 3 合并,这样是最优的int main(){ ll a,b,c; while(~sll(a)){ sll(b),sll(c); ll ans=0,res=0,k=0; ...原创 2021-03-20 23:35:01 · 265 阅读 · 2 评论 -
牛客IOI周赛23-提高组 C 星星(贪心)
题解来自:洛谷定义 d 数组:表示将星星传给第头牛,所以 ,(其中为星星总数的平均值,当然 d 数组有正负之分)但是第 1 头牛收到的,即是个未知数,方便起见令其为所以 :得到经过上述的转化,我们最后要求的是可以发现每一个中都包含一个且其余的式子很有规律变化一下形式,令可以发现所以上面三个式子变化为 :而最后的答案也转化为求:而根据贪心const int N=1e6+5; ...原创 2021-03-08 13:17:21 · 209 阅读 · 0 评论 -
牛客练习赛77 小G的约数(整除分块)
ll go(ll n){ return n*(n+1)/2;}ll G(int n){ ll ans=0; for(ll l=1,r;l<=n;l=r+1){ r=n/(n/l); ans+=(go(r)-go(l-1))*(n/l); } return ans;}int main(){ while(~sd(n)){ pll(G(G(n))); }}原创 2021-02-26 23:24:24 · 306 阅读 · 0 评论 -
牛客练习赛77 小G的GCD(差分)
观察样例 2 ,可以发现答案为 (3+3+3),对于 k 的倍数:ak,其贡献到 (a+1)k 位置时改变,不由得想到差分的性质const int N=1e6+5; int n,m; int i,j,k; ll a[N];int main(){ while(~sdd(n,k)){ for(int i=k;i<=n;i+=k) a[i]=i; ll ans=0; for(int i=1;i<=n;i++) a[i]+=a[i-1]...原创 2021-02-26 22:28:55 · 231 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛 Easy Equation(差分)
const int N=3e6+5; int n,m; int i,j,k; ll g[N],f[N];int main(){ int a,b,c,d; while(~sdd(a,b)){ sdd(c,d); for(int i=0;i<=a;i++) g[i]++,g[i+b+1]--; for(int i=1;i<=a+b;i++) g[i]+=g[i-1]; //i 为 x+y 的方案数 for(int i=0;i<=...原创 2021-02-25 22:52:18 · 225 阅读 · 1 评论 -
牛客练习赛76 CG的通关秘籍(组合数学)
首先暴力解决时枚举 1~n 的全排列,共种方法,现在确定第一个数,而第一个数并不产生贡献设第一个数为 x,那么第二个数产生贡献的情况有两种,要么 y∈ [1,x-1] 产生 2 点贡献,要么 y ∈ [x+1,m] 产生 1 点贡献现在确定 x,y,由于全排列的性质,总共产生贡献为,其值为这样 x,y 确定下来,目前只剩下种排列方法,而每一位的总贡献为,共 n-1 位产生(除 x)所以答案为ll pow_mod(ll a,ll x){ ll ans=1;...原创 2021-02-25 21:34:02 · 186 阅读 · 0 评论 -
第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 小宝的幸运数组(同余定理)
如果预处理前缀和,题目依然是的复杂度,所以采用其他的方法当时还想了一个二分的算法,但是二分必须满足单调性,但此题不满足在一个数列中 (a+b+c+d)%mod=k 其中 (a+b)%mod=k,那么 (c+d)%k=0,所以记录第一个 k 的位置,寻找之后的位置与其的最大值即可const int N=1e5+5; int n,m; int i,j,k; ll a[N];int main(){ //IOS; rush(){ ...原创 2021-01-30 22:32:52 · 218 阅读 · 0 评论 -
第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 建立火车站(二分)
题目描述新冠疫情,导致了各个城市之间物资输送的障碍。假设有N个城市在一条直线上,为了物资能顺利抵达各个城市,可以在路线上建立最多个数为K个暂时停靠站,由于火车在两个站台(城市也算站台)之间的距离越近,需要的总花费越少,因此我们需要让火车相邻两个站台之间的最大距离最小,求出距离L,2 ≤N ≤100000, 0 ≤K ≤100000,所有城市坐标小于等于10^12,且不存在负值。提醒: 城市坐标均为正整数,且停靠站只能建在整数坐标点上。输入描述:第一行输入城市个数N,可建立停靠站个数K.原创 2021-01-30 21:22:09 · 346 阅读 · 0 评论 -
第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 黑洞密码
const int N=1e5+5; int n,m; int i,j,k; int a[N]; char ch[N];int main(){ IOS; string s; cin>>s; char str[500][2]; for(int i=0;i<26;i++) str['a'+i][0]='a'+i; for(int i=0;i<25;i++) str['a'+i+26][0]='...原创 2021-01-30 21:19:49 · 262 阅读 · 0 评论 -
牛客练习赛66 C.公因子(数论)
题目用到了一个 gcd 的推论,和 CF 的题目类似 :BLOG求出 gcd 之后,要求出 x 的值,k*gcd=a[1]+x -> k*gcd-a[1]>=0,求解 k 的值带入原式求出 x 即可const int N=1e6+5; int n,m; int i,j,k; ll a[N]; signed main(){ //IOS; while(~sd(n)){ for(int i=1;i<=n...原创 2021-01-24 13:56:28 · 189 阅读 · 0 评论 -
NC15203 投票统计(离散化)
其实这个题用 map 的话很好解决本题采用离散化解决,利用桶排的思想,因为桶无法申请那么大的内存,所以进行离散化const int N=1e5+5; int i,j,k; int n,m,t; pii a[N],cnt[N]; vector<int> v,ans;int get_id(int x){ return lower_bound(v.begin(),v.end(),x)-v.begin()+1;}bool ...原创 2020-11-22 15:47:32 · 234 阅读 · 0 评论 -
2020 ICPC Data Structure Problem(前缀和+线段树)
给出 2n 个数分别代表 a b 两个数组,题目要求维护数 c,c 是由 a,b 递推过来的题目的难点在于如何将单点修改转化到区间上来,我们可以枚举一下 ci 来寻找规律c1=max( a1,b1 ) c2=max( a2,max(b1+b2,a1+b2) ) c3=max( a3,max(a2+b3,max(b1+b2+b3,a1+b2+b3) ) ) 由此可以得出#define inf (1e18+1ll)const int N=2e5+5;...原创 2020-11-19 22:29:51 · 250 阅读 · 0 评论 -
2020 ICPC Knapsack(超大 01 背包)
如果按照正常解法求解 01 背包问题,一定会超时,先按照性价比选择,减少背包的容量,这样再用一次 01 背包解决问题即可const int N=2e5+5; int i,j,k; int n,m,t; ll dp[100+5]; struct Node { ll w,v; }a[N];bool cmp(Node a,Node b){ return a.v*b.w>a.w*b.v; }in...原创 2020-11-19 14:41:41 · 325 阅读 · 3 评论 -
2020 ICPC 2020(二分)
给出一个长度为 n 的字符串,统计 {si,sj,su,sv}=2020 的数量,并且 i<j<u<v ,如果一个字符被统计过,那么它不能再次被统计知道题目考察二分之后其实并没有那么难,二分枚举答案 ans,但是要考虑如何构成 2020 才能 ans 个,我们可以按位考虑,必须有第一个2 后面的 0 才有效,有 ans 个 2 后,第二个 2 才开始计数const int N=1e5+5; int i,j,k; int n,m,t; i...原创 2020-11-19 13:56:11 · 475 阅读 · 0 评论 -
2020 ICPC Determinant(计算行列式)
按照题目要求计算行列式 M对行列式进行消元,换成下三角行列式即可const int N=1e5+5; int i,j,k; int n,m,t; ll a[N]; ll b[N];void rep(ll &x){ x%=mod; x+=mod; x%=mod;}int main(){ //IOS; while(~sd(n)){ ll x=read(); ...原创 2020-11-14 15:03:28 · 346 阅读 · 0 评论 -
Nowcoder 20277 [SCOI2010]字符串(卡特兰数+组合数学)
题目一看就和卡特兰数有关,计算 即是最后的答案const ll mod=20100403;ll mul_mod(ll a,ll x,ll p){ ll ans=0; while(x){ if(x&1) ans=(ans+a)%p; a=(a+a)%p; x>>=1; } return ans;}ll pow_mod(ll a,ll x,ll p){ ll ans=1...原创 2020-10-30 12:24:41 · 231 阅读 · 0 评论 -
2020ICPC Intelligent Warehouse(线性动态规划)
其实看到这个题时能够想到 dp,当时想的是 dp[i] 以数 i 结尾的最大长度,其实想法没错,写了一个 O(n*n)的程序一开始的思路是,如果 dp[i] 是以 i 为结尾,那么(j<i 且 i %j ==0)的话,那么可以更新数组但是 n 太大,可以进行优化直至 O(n*sqrt(1e7)) ,换种思路想一下,以 i 为结尾,那么可以向后更新 dp[j],而不是向前更新O(n*n) 超时代码:int main(){ //IOS; while...原创 2020-10-27 22:11:24 · 311 阅读 · 0 评论 -
2020ICPC Matrix Subtraction(二维差分)
给出一个 n*m 的矩阵,再给出一个 大小为 x*y 的子矩阵,每次操作可以使矩阵内任意大小为 x*y 的矩阵内所有的元素减一,问是否可以使矩阵内所有元素都置 0const int N=1e3+5; int n,m,t; int i,j,k; int diff[N][N]; //差分数组 int sum[N][N]; //前缀和数组 int x,y;void add(int x,int y,int nx,int ny,int c){ ...原创 2020-10-27 09:23:07 · 209 阅读 · 0 评论 -
约瑟夫环(STL链表)
//#include <bits/stdc++.h>#include <iostream>#include <algorithm>#include <list>using namespace std;#define FOR(i,a,b) for(int i=a;i<=b;i++)#define null NULLconst double pi=3.14;const int N=2e5+5; int a[N];in...原创 2020-10-27 08:30:08 · 263 阅读 · 0 评论 -
2020ICPC Walking Machine(网格深搜)
有一个网格 n*m ,网格上有一个字母,必须按照网格上的指示移动,问从这 n*m 个点出发有几个点可以出界只要深搜姿势正确,再加点信心,AC 其实很简单const int N=1e3+5; int n,m,t; int i,j,k; char a[N][N]; int vis[N][N]; int flag=0;void dfs(int x,int y){ if(vis[x][y]==-1) return ; ...原创 2020-10-26 23:33:39 · 177 阅读 · 0 评论 -
最大乘积(数论结论)
尽可能的分成 3 的 k 次方,若余一,贪心取 4const ll mod=2000000000000000003;const int N=2e5+5; int n,m,t; int i,j,k;int main(){ //IOS; rush(){ sd(n); ll ans; if(n==1){ cout<<1<<endl; continue; } if(n...原创 2020-07-14 18:45:39 · 245 阅读 · 0 评论 -
“科林明伦杯”哈尔滨理工大学第十届程序设计竞赛 B.减成一(差分)
链接:https://ac.nowcoder.com/acm/contest/5758/B题目描述存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一。问最少多少次操作,可以让所有数都变成1。数据保证一定有解。输入描述:输入t,代表有t组数据。每组数据输入n,代表有n个数。接下来一行输入n个数,数字大小小于1e6。(t<=1000,n<1e5,∑n < 1e6)输出描述:每组数据输出一个整数代表最少需要操作的次数。输入...原创 2020-06-01 13:53:58 · 268 阅读 · 0 评论 -
三角形
题目描述小明有一根长度为a的木棒,现在小明想将木棒分为多段(每段木棒长度必须为整数),使得分隔后的木棍中,取出的任意三段都不能构成三角形,小明想知道木棒最多被分成几段?输入描述:输入数据的第一行是t,表示数据的组数, 接下来每组数据输入一个a(t<=1000, 1 <= a < 2^64 - 1)输出描述:对于每组输入样例,打印木棒最多被分为多少段示例1输入213输出12#pragma GCC optimize(2).原创 2020-05-31 21:45:03 · 278 阅读 · 0 评论 -
n的约数(数论+DFS)
const int N=100+5; ll n,m,t,ans; int i,j,k; int prime[N],num; bool vis[N],flag;void init(const int lock=100){ num=0; for(int i=2;i<=lock;i++){ if(!vis[i]){ prime[++num]=i; for(int j=2*i;j<...原创 2020-07-05 09:45:47 · 2234 阅读 · 0 评论 -
贝伦卡斯泰露(DFS || BFS)
有题目可知,最后我们一定会得到 a数组与b 数组相等的情况const int N=50+5; int n,m,t; int i,j,k; int a[N],b[N],tag[N]; bool flag;void DFS(int pa,int pb,int cur)//pa a数组所储存的元素个数,pb b数组的元素个数,cur 原数组{ if(flag) return ; if(pa> (n>>1) ) return ...原创 2020-07-04 23:27:20 · 794 阅读 · 1 评论