大一去不了省赛很正常…… 自己太弱了…… 却又是总是寄希望于别人比较强来拯救自己。
弱就是弱 没有什么办法。 要想办法让自己变强才是啊……
加油吧……
总之先开坑
Counter:95
新队员专题分类:
0、搜索 1、Tire树 2、矩阵乘法 3、最短路 4、概率DP、期望、高斯消元
5、最大团、稳定婚姻问题 6、二分图匹配 7、网络流 8、数学
9、树状数组 10、线段树 11、差分约束、2-SAT、拓扑排序 12、KMP、Manacher 13、强连通分量
14、分块 15、数位DP 16、函数变换 17、分治 18、斜率优化
upd 10.7 马上就要初赛了……10.11感觉如果再次手抖必然提前退役啊……哎只想让高中的OI之路圆满一些……QAQ
RP++……祝我初赛顺利吧! 不要再出什么意外了……
#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; }
Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com