比赛补题
,
infinity°º
stay hungry stay foolish
展开
-
密码锁:dp
从最大的开始(倒着)更新每个点的下一个,保证了输出顺序 。不用sort ,节省时间题目描述 2s行旅箱上一般有一个 4 位的密码锁,每一位是0 - 9共10个数字,可上下转动。若密码锁的 4 个位不完全相同,则称状态不同,例如 0234、1235是两个不同的状态,因此有0000 - 9999共10000个不同的状态。设现有一个 k 位密码锁,每次能转动相邻的若干位,例如:0000 -> 0111、0000 -> 0990都可能是转动 1次。求某个初始状态转动 1次所能到达的状..原创 2021-12-13 19:38:38 · 259 阅读 · 0 评论 -
集合划分:状压dp
题目描述n个人,每个人手上有一个数ai。将这些人分成若干组,组没有编号,要求每组人手上的数字之和都是质数。求合法的分组方案数。输入格式第一行一个正整数T,表示测试数据的组数每组数据第一行一个正整数n每组数据第二行n个正整数a1,a2,…,an1≤T≤51≤n≤151≤ ai≤100输出格式每组数据一行一个整数,即合法的分组方案数输入样例复制133 2 5输出样例复制3#include<bits/stdc++.h>/...原创 2021-12-13 19:35:11 · 277 阅读 · 0 评论 -
区间第k小:可持久化线段树
题目描述 2s给定一个序列a1,a2,…,an,m次操作,每次给定l,r,k,问al,al+1,…,ar中第k 小的值。输入格式第一行一个正整数T(1≤T≤3),表示有T组测试数据。每组数据第一行n,m(1≤n,m≤100000)。第二行n个正整数a1,a2,…,an(1≤ai≤n)。接下来m行,每行描述一个操作,其中1≤ l ≤ r ≤n,1≤ k ≤ r−l+1。输出格式对于每个询问,输出一行一个整数,即第k小的值。输入样例复制15 51 3 5 4 2...原创 2021-12-13 19:34:01 · 240 阅读 · 0 评论 -
支付 。
题目描述 :1s 256MB有 n 个物品,第 i 个物品的价值为 wi,选择若干物品,这些物品的价值和为 S。作为支付手段,希望选择一部分物品能精确地支付不大于 k 的所有金额,即任意 s 满足 1 ≤ s ≤ k 都有对应的选择方案使 S = s。给定 k 的值,构造满足要求的序列 wi,使 n 尽可能小的前提下 wi的和尽可能小输入格式第一行一个整数 T,代表有 T 组测试数据。每一组测试数据一行,1 个整数 k输出格式对于每组测试数据第一行一个整数 n第二行输出满...原创 2021-12-13 19:31:49 · 769 阅读 · 0 评论 -
寻根:dfs(子树带权和不带权的和)
类似哈夫曼树求wpl(带权路径长度),上移一层 就减去子树的 不 带权的和。下移就加题目描述有一颗有 n 个结点树,结点被编号为 1 ~ n,记根结点深度为 1,如果第 i 个结点的深度是 d,则它贡献的价值是 d × wi,这棵树的价值是所有结点的价值和。求当根结点为 1 ~ n 时, 树的价值分别为多少输入格式第一行一个整数 T,代表有 T 组测试数据。对于每一组测试数据,第一行有 1 个整数 n,第二行有 n 个整数 wi,接下来 n − 1 行,每行有两个整数 x, y,.原创 2021-12-13 19:27:39 · 318 阅读 · 0 评论 -
太空旅行:倍增+位运算
http://172.20.8.83/showsource.php?id=2968#include<bits/stdc++.h>using namespace std;const int N=1e5+10;const int inf=0x3f3f3f3f;typedef long long ll;int n,m, a[N],nex[N][17];//2^17>1e5,注意下面一定不能取到17 会越界stack<int>s;void init(){ .原创 2021-12-13 19:22:25 · 776 阅读 · 0 评论 -
zjhu1016密码锁
#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;const int inf=0x3f3f3f3f;int k,d[8]={1,10,100,1000,10000,100000},b[8],c[8];vector<int>ans[maxn];char form[10]=" %00d";void solv(int s){ int m=s,st,tt; //s是作为下一个数,找s的前一个数.原创 2021-12-04 10:45:16 · 257 阅读 · 0 评论 -
2021icpc上海站G
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=998244353;const int maxn=1e5+5;vector<int>v[maxn];int n,x,y;ll vis[maxn],sum=1,a[maxn],size[maxn];//size代表当前节点下可用的边数 ,vis代表这个节点上的边是否被占用 void dfs(int now,int.原创 2021-11-28 19:12:42 · 626 阅读 · 0 评论 -
ccpc女生赛I
#include<bits/stdc++.h>using namespace std;int n,m,len,l=0,v=0;char g[55][55];string s;int main(){ int x,y,tx,ty,f; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ cin>>g[i][j]; if(g[i][j]=='*'){ t.原创 2021-11-12 22:27:44 · 301 阅读 · 0 评论 -
rb复。2
#include<bits/stdc++.h>using namespace std;const int maxn=1000+5;const int inf=0x3f3f3f3f;int n,m,c[maxn],v[maxn],dp[30*maxn];//dp[第几个[空间 int main(){ cin>>n>>m; memset(dp,inf,sizeof(dp));dp[0]=0; for(int i=1;i<=n;i++) scanf(".原创 2021-10-30 09:56:36 · 102 阅读 · 0 评论 -
rb复.1
#include<bits/stdc++.h>using namespace std;const int maxn=1000;//,vis[maxn][maxn][maxn]int t,c[4],b[4];struct node{ int a[4]; int step;};int check(int x,int y,int z){ if(x<0||y<0||z<0) return 0;// if(vis[x][y][z]==0) return 0; el.原创 2021-10-30 09:55:57 · 78 阅读 · 0 评论 -
rb3Floyd的路径输出。还有几个点扣一下18
#include<bits/stdc++.h>using namespace std;const int maxn=1e3+5;const int inf=0x3f3f3f3f;int n,m,k,point[maxn],path[maxn][maxn];struct node{ int c,v;}g[maxn][maxn];//求任意两点间最短路 void floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++.原创 2021-10-13 20:21:13 · 101 阅读 · 0 评论 -
rb4 矩阵22。链式前向星22
#include<bits/stdc++.h>using namespace std;const int maxn=510;//空间 int n,m,d,c,q,vis[maxn],g[maxn][maxn];int ok(int s,int e){ int f=0; queue<int>q; q.push(s); while(!q.empty()){ s=q.front();q.pop(); if(s==e) {f=1;break;} for(int.原创 2021-10-13 12:46:17 · 83 阅读 · 0 评论 -
rb2。。。。。
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+5;int n;struct node{ int x,y,v,sign; double k;}a[maxn];bool cmp(node a,node b){ if(a.k==b.k&&a.sign==b.sign){ if(a.x>0) return a.x<b.x; re.原创 2021-10-12 20:49:00 · 79 阅读 · 0 评论 -
rb1 。。。。。
#include<bits/stdc++.h>using namespace std;const int maxn=210;int n,k,a[maxn],vis[1200],x;int ok(int i,int j,int k,int q){ if(i!=j&&j!=k&&k!=q&&j!=q&&i!=q) return 1; return 0;}void init(){ int ans=0; memset(.原创 2021-10-12 20:48:19 · 69 阅读 · 0 评论 -
addition
#include<bits/stdc++.h>using namespace std;const int maxn=100;int n,sign[maxn],a[maxn],b[maxn],c[maxn];int main(){ while(cin>>n){ for(int i=0;i<n;i++) scanf("%d",&sign[i]); for(int i=0;i<n;i++) scanf("%d",&a[i]); for...原创 2021-09-29 20:51:20 · 79 阅读 · 0 评论 -
limit
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inf =0x3f3f3f3f;const int maxn=1e5+5;int n,t,a[maxn],b[maxn],sum,d;int main(){ while(~scanf("%d%d",&n,&t)){ for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&..原创 2021-09-28 21:45:51 · 76 阅读 · 0 评论 -
hdu6957
#include<bits/stdc++.h>using namespace std;typedef long long ll;ll a[2010][2010];ll b[2010][2010];ll h[2222];ll que[22222];signed main(){ ll t; scanf("%d",&t); while(t--) { ll n,m; scanf("%d%d",&n,&a...原创 2021-07-29 20:38:52 · 116 阅读 · 0 评论 -
hdu6950
#include<bits/stdc++.h>using namespace std;long long v[10000002],prime[10000002];void zhishu(){ long long m=0; memset(v,0,sizeof(v)); memset(prime,0,sizeof(prime)); for(long long i=2;i<=10000000;i++){ if(v[i]==0){ v[i]=i;prime...原创 2021-07-29 20:07:22 · 84 阅读 · 0 评论 -
hdu6954
#include<bitsdc++.h>using namespace std;const int maxn=1e7+2;long long v[maxn],prime[maxn],s[maxn];long long m=0;void zhishu(){ s[0]=0; memset(v,0,sizeof(v)); memset(prime,0,sizeof(prime)); for(long long i=2;i...原创 2021-07-29 20:08:59 · 105 阅读 · 0 评论