51nod 1821 最优集合
来源:互联网 发布:淘宝短信营销作用大吗 编辑:程序博客网 时间:2024/05/21 17:29
如果现在能得到[1,t]范围内的任意值。若新来了一个数x,x<=t+1,则可以得到新的范围[1,t+x]。
利用这个性质,O(T*(N+M))时间处理下就行了。
(膜zhenhao大佬)
#include <bits/stdc++.h>using namespace std;void read(int&a){ char ch;while(!((ch=getchar())>='0')&&(ch<='9')); a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';}inline void prin_d(long long x){ if (x > 9) { prin_d(x / 10); } putchar(x % 10 + '0'); return ;}const int MAXN=1010;int a[MAXN][MAXN],stk[MAXN];int main(){int n,i,j,x,y,xi,yi,T,k,stksum;long long ans;while(~scanf("%d",&n)){for(i=1;i<=n;i++){read(a[i][0]);for(j=1;j<=a[i][0];j++)read(a[i][j]);sort(a[i]+1,a[i]+a[i][0]+1);}read(T);while(T--){read(x);read(y);read(k);ans=0;xi=yi=1;while(xi<=a[x][0]&&a[x][xi]<=ans+1){ans+=a[x][xi];xi++;}stksum=0;for(i=0;i<min(k,a[y][0]);i++){while(yi<=a[y][0]&&a[y][yi]<=ans+1){stk[stksum++]=a[y][yi];yi++;}if(stksum){ans+=stk[stksum-1];stksum--;}elsebreak;while(xi<=a[x][0]&&a[x][xi]<=ans+1){ans+=a[x][xi];xi++;}}prin_d(ans);puts("");}}}
0 0
- 51Nod-1821-最优集合
- 51nod 1821 最优集合
- 51nod 1821 最优集合
- 51NOD 1821 最优集合 【并查集】
- 51nod 1821 最优集合(想法+贪心+并查集)
- 51nod 1821 最优集合 并查集 || 栈
- 51nod 1821 最优集合(贪心+并查集)
- 51nod 1821 最优集合 (思维+并查集or栈)
- 1821 最优集合
- 51nod 最小集合
- 集合计数 51Nod
- 51nod 1352:集合计数
- 51nod 1616 最小集合
- 51nod 1352 集合计数
- 51nod 1616 最小集合
- 51nod 1622 集合对
- 51Nod 1352 集合计数
- 51nod-1616 最小集合
- Javascript内置对象总结
- 文件或目录损坏无法读取
- Java是传值还是传引用
- 关于配置tomcat后出现401 403问题的解决方法
- vue2.0使用(1):创建新项目
- 51nod 1821 最优集合
- 指数(道琼斯指数)
- 分治---快速排序
- python学习笔记(4):字符串及编码问题
- scaleType的详细解释
- 正则表达式元字符
- 棋盘覆盖问题
- CSS基础知识深入探讨
- 解决 react-native run-android 出现 gradle下载慢问题