最近想到要整理下以前学过的一些知识。首先先说说高精度压位储存的知识吧,具体实现是参照RXDoi神牛的,也是得到了他的不少帮助,这里表示感谢!
(需要模板的或者不想听废话的就直接翻到后面看我代码就行~)
最近想到要整理下以前学过的一些知识。首先先说说高精度压位储存的知识吧,具体实现是参照RXDoi神牛的,也是得到了他的不少帮助,这里表示感谢!
(需要模板的或者不想听废话的就直接翻到后面看我代码就行~)
1058 stl(set和map乱搞)或者splay
1044 二分答案+前缀和优化dp(还要滚存)
1800 求出直径条数x,答案是C(x,2)
1002 高精度+递推(数学)
1008 数学推理
1051 tarjan求SCC缩点求出度为0点的个数
1208 splay或set
1588 splay
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<string> #include<set> #include<queue> #include<stack> #include<map> #include<cmath> #include<cstdlib> #define ll long long #define maxn 100010 #define inf 1000000000 #define linf (1LL<<50) using namespace std; #define REP( i, n ) for ( int i = 1; i <= n; i ++ ) #define REP_0( i, n ) for ( int i = 0; i < n; i ++ ) #define REP_0N( i, n ) for ( int i = 0; i <= n; i ++ ) #define REP_S( i, ss ) for ( char *i = ss; *i; i ++ ) #define REP_G( i, u ) for ( int i = pos[ u ]; i; i = g[ i ].frt ) #define FOR( i, a, b ) for ( int i = a; i <= b; i ++ ) #define DWN( i, a, b ) for ( int i = b; i >= a; i -- ) #define RST( a ) memset ( a, 0, sizeof ( a ) ) #define CLR( a, x ) memset ( a, x, sizeof ( a ) ) #define CPY( a, b ) memcpy ( a, b, sizeof ( a ) ) inline ll read() { ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x*=10;x+=ch-'0';ch=getchar();} return x*f; } inline void read(char *s,int &ts) { char x=getchar(); while(!(x>='a'&&x<='z'))x=getchar(); while(x>='a'&&x<='z')s[++ts]=x,x=getchar(); } int n,k; int a[maxn],b[maxn],c[maxn]; int ans1=inf,ans2; int mx,mn; int t1,t2; int flag; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=k;i++) { mx=-1; mn=inf; for(int j=1;j<=n;j++) { if(a[j]>mx) {mx=a[j];t1=j;} if(a[j]<mn) {mn=a[j];t2=j;} } //printf("%d %d\n",mx,mn); if(mx-mn<=1) {ans2=i-1;flag=1;ans1=min(ans1,mx-mn);break;} ans1=min(ans1,mx-mn); b[i]=t1;c[i]=t2; a[t1]--;a[t2]++; } if(!flag) ans2=k; mx=-1;mn=inf; for(int j=1;j<=n;j++) { if(a[j]>mx) {mx=a[j];t1=j;} if(a[j]<mn) {mn=a[j];t2=j;} } ans1=min(ans1,mx-mn); printf("%d %d\n",ans1,ans2); for(int i=1;i<=ans2;i++) printf("%d %d\n",b[i],c[i]); return 0; }
国家集训队1999论文集
陈宏:《数据结构的选择与算法效率——从IOI98试题PICTURE谈起》
来煜坤:《把握本质,灵活运用——动态规划的深入探讨》
齐鑫:《搜索方法中的剪枝优化》
邵铮:《数学模型的建立、比较和应用》
石润婷:《隐蔽化、多维化、开放化——论当今信息学竞赛中数学建模的灵活性》
杨帆:《准确性、全面性、美观性——测试数据设计中的三要素》
周咏基:《论随机化算法的原理与设计》
先把这几天要填的坑填完……T T
题意 by hongrock (语文水平及表达水平不高借鉴别人的题目翻译……)
题目就是N个点的无向图,先给出M条边,这M条边使得任意两点间要么不连通,要么仅有唯一的路径相连。
两个点如果连通就说明它们在同一个区域。
然后Q个询问
1 x,输出x所在区域的最长路径;
2 x y,如果x和y在同一区域则忽略,否则合并两个区域,并且合并之后的新区域的最长路径应该是最短的。
Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com