欢迎使用CSDN-markdown编辑器
来源:互联网 发布:大数据重塑护理价值 编辑:程序博客网 时间:2024/06/05 14:33
A
polya板子题
#include <bits/stdc++.h>using namespace std;int N,T;int gcd(int x, int y){ if(y==0) return x; return gcd(y,x%y);}long long power(int x,int y){ long long p = 1, q = x; for(; y; y>>=1){ if(y&1) p*=q; q *= q; } return p;}int main(){ while(scanf("%d%d",&N,&T)!=EOF){ long long Ans = 0; for(int i=1; i<=N; i++) Ans += power(T,gcd(i,N)); printf("%d ",Ans/N); if(N&1) Ans += N*power(T,(N+1)/2); else Ans += N/2*(power(T,(N+2)/2)+power(T,N/2)); printf("%d\n",Ans/N/2); }}
B
单纯形
F
矩阵快速幂板子题
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int n;struct matrix{ int x,y; int num[10][10]; friend matrix operator *(const matrix a, const matrix b){ matrix c;c.x=a.x,c.y=b.y; for(int i=0;i<a.x;i++) for(int j=0;j<b.y;j++){ int sum=0; for(int k=0;k<a.y;k++){ sum=(sum+(long long)a.num[i][k]*b.num[k][j])%n; if(sum<0) sum+=n; } c.num[i][j]=sum; } return c; }}base;matrix mi(matrix a,long long k){ matrix s; s.x=s.y=a.x; memset(s.num,0,sizeof(s.num)); for(int i=0;i<s.x;i++) s.num[i][i]=1; while(k){ if(k&1) s=s*a; k=k>>1; a=a*a; } return s;}int main(){ base.x=base.y=6; int map[6][6]={ {2,1,1,1,0,0},{1,2,1,1,0,0},{1,0,1,0,0,0},{0,1,0,1,0,0},{1,1,1,1,1,0},{2,2,2,2,1,1} }; for(int i=0;i<6;i++) for(int j=0;j<6;j++) base.num[i][j]=map[i][j]; int x,y,dx,dy;long long t; scanf("%d%d%d%d%d%lld",&n,&x,&y,&dx,&dy,&t); matrix tm; tm.x=1; tm.y=6; int tmp[]={x-1,y-1,dx,dy,0,1}; for(int i=0;i<tm.y;i++) tm.num[0][i]=tmp[i]; tm=tm*mi(base,t); printf("%d %d\n",tm.num[0][0]+1, tm.num[0][1]+1); return 0;}
H
绝对值求和,拆开扫描即可 ?
#include <bits/stdc++.h>using namespace std;const int MN = 3e5+9;struct node{ long long a; int b,c;}s[MN];bool cmp1(const node &u, const node &v){ return u.a<v.a;}bool cmp2(const node &u, const node &v){ return u.b<v.b;}int N,K;int main(){ scanf("%d",&N); for(int i=1; i<=N; i++){ scanf("%d",&s[i].a); s[i].b = i; } sort(s+1,s+N+1,cmp1); scanf("%d",&K); long long Len = 0, Sum = 0; for(int i=1; i<=K; i++){ Sum += (i*2-1-K)*s[i].a; Len += s[i].a; } long long Ans = Sum; int St = 0; for(int i=1; i+K<=N; i++){ Sum -= Len-s[i].a*K; Len += s[i+K].a-s[i].a; Sum += s[i+K].a*K-Len; if(Sum<Ans) Ans = Sum, St = i; } for(int i=1; i<=K; i++) printf("%d ",s[St+i].b);}
I
特判
#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int main(){ int v[3],k,u[3]; scanf("%d%d%d%d",&v[0],&v[1],&v[2],&k); sort(v,v+3); u[0]=min(k/3,v[0]-1); u[1]=min((k-u[0])/2,v[1]-1); u[2]=min(k-u[0]-u[1],v[2]-1); long long ans=1; for(int i=0;i<3;i++) ans*=(u[i]+1); cout<<ans<<endl; return 0;}
J
单调队列dp ?
#include <bits/stdc++.h>using namespace std;const int MN = 3e5+9;long long f[2][MN];int N,M,B,mono1[MN],mono2[MN],D;struct node{ int a,t; }s[MN];bool cmp(const node &u, const node &v){ return u.t<v.t;}long long calc1(int q,int i,int j,long long T){ i = mono1[i]; if(i+T*D>=j) return f[q][i]; else return f[q][i]+j-i-T*D;}long long calc2(int q,int i,int j,long long T){ i = mono2[i]; if(i-T*D<=j) return f[q][i]; else return f[q][i]+i-T*D-j;}int main(){ scanf("%d%d%d",&N,&M,&D); long long Sum = 0; for(int i=1; i<=M; i++){ scanf("%d%d%d",&s[i].a,&B,&s[i].t); Sum += B; } sort(s+1,s+N+1,cmp); for(int i=1; i<=N; i++) f[1][i] = abs(i-s[1].a); for(int i=2; i<=M; i++){ int p = i&1, q = p^1, T = s[i].t-s[i-1].t; int L1 = 1, R1 = 0, L2 = 1, R2 = 0; for(int j=1; j<=N; j++){ while(L1<=R1 && f[q][j]<=calc1(q,R1,j,T)) R1--; mono1[++R1] = j; while(L1<R1 && calc1(q,L1+1,j,T)<=calc1(q,L1,j,T)) L1++; f[p][j] = calc1(q,L1,j,T); } for(int j=N; j>=1; j--){ while(L2<=R2 && f[q][j]<=calc2(q,R2,j,T)) R2--; mono2[++R2] = j; while(L2<R2 && calc2(q,L2,j,T)<=calc2(q,L2+1,j,T)) j++; f[p][j] = min(f[p][j], calc2(q,L2,j,T)); } } long long Ans = f[N&1][1]; for(int i=2; i<=N; i++) Ans = min(Ans,f[N&1][i]); printf("%I64d\n", Sum-Ans);}
K
两个互逆置换相乘等于零置换,判断K次以内能不能到达和是否能 mod 2即可
#include <bits/stdc++.h>using namespace std;const int MN = 111;const int D[2][2] = {{0,1},{1,0}};int N,K,s[MN],p[2][MN],q[2][MN],d[MN];int check(int M){ for(int i=1; i<=N; i++) p[1][i] = i; for(int i=0; i<M; i++){ int x = i&1; int y = x^1; for(int j=1; j<=N; j++) p[x][j] = p[y][q[d[i]][j]]; for(int j=1; j<=N; j++){ if(p[x][j]!=s[j]) break; if(j==N) return i+1; } } return 0;}int main(){ scanf("%d%d",&N,&K); for(int i=1; i<=N; i++) scanf("%d",&q[0][i]); for(int i=1; i<=N; i++) q[1][q[0][i]] = i; for(int i=1; i<=N; i++) scanf("%d",&s[i]); for(int i=1; i<=N; i++){ if(s[i]!=i) break; if(i==N) {printf("NO"); return 0;} } for(int i=0; i<MN; i++) d[i] = 0; int T0 = check(K); for(int i=0; i<MN; i++) d[i] = 1; int T1 = check(K); bool flag = 0; for(int i=0; i<2; i++){ memcpy(d,D[i],sizeof(D[i])); flag = flag | (check(2)==0); } if(T0>0&&(K-T0)%2==0) if(K==T0||flag) {printf("YES"); return 0;} if(T1>0&&(K-T1)%2==0) if(K==T1||flag) {printf("YES"); return 0;} printf("NO");}
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 地震数值模拟-CUDA的有限差分正演的共享存储优化
- MFC之旅——CSocket神级易错点
- leetcode[Convert a Number to Hexadecimal]//待整理多种解法
- lvs 负载均衡安装
- python中random模块产生随意行走的路线
- 欢迎使用CSDN-markdown编辑器
- MyCnCart之制造商/品牌
- PAT 1013数素数
- saltstack-安装笔记(1)
- 第六章 常用类总结
- 动态规划之0-1背包问题(简单易懂)
- POJ2135: Farm Tour 题解
- css_day01_简单介绍
- poj 2352 Stars(树状数组)