锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
棰樻剰錛?br>緇欎綘涓涓綆遍棶棰?N<=100 Ai<=7000) 璁扮敤榪欎簺鏈夐檺鐗╁搧鑳芥嫾鎴愮殑閲嶉噺縐嶆暟涓篈ns
姹?鎶奿鐗╁搧Ai 鎹㈡垚X鍚?浣挎柊鐨勮兘寰楀埌鐨勯噸閲忕鏁癛et鏈澶?鍚屾椂浣縓鏈灝?姹俋鍜孯et
鍋氭硶錛?br>榪欎釜棰樻垜鍋氫簡涓鏅氫笂鍔犱竴涓婂崍錛侊紒
鐚滄兂錛?br>鎹竴涓墿鍝?絳変環浜?鍏堝幓鎺夎繖涓墿鍝佸仛N-1涓墿鍝?鏈鍚庡姞鍏ヤ竴涓墿鍝佸茍鏇存柊
錛堝啓浜嗕釜鏆村姏 鏄鍚堢殑錛?br>鐒跺悗灝卞皢闂鍙樹負浜嗙湡姝g殑涓ら棶錛?br>絎竴闂紝姹俋浣垮緱闄や簡X鐨凬-1涓墿鍝佽兘寰楀埌鐨勭鏁癆ns'鏈澶?br>錛堝洜涓烘渶緇堟柟妗堜竴鏍?鎵浠ュ緱鍒犱竴涓渶娌$敤鐨勶級
絎簩闂紝娣誨姞涓涓墿鍝?浣垮緱鏈鍚庡緱鍒扮殑鏈澶?br>
瀵逛簬絎竴闂?nbsp; 涓涓畝鍗曠殑鎯蟲硶渚挎槸鏋氫婦鍘繪帀鍝釜鐗╁搧 鍋?00嬈¤綆遍棶棰?br>浣嗘槸鎴戜滑榪樻槸閬囧埌浜嗙摱棰?nbsp; 鍋氫竴嬈¤綆遍棶棰樺鏉傚害O(100^2*7000) 鏋氫婦鐨勮瘽 鍋氫竴嬈″氨寰?.5縐?鏍規湰鏃犳硶婊¤凍
錛堝緢涓嶅垢鎴戞兂涓嶅埌涓嶆灇涓劇殑鏂規硶 鍙兘鐢ㄥ尯闂磋儗鍖呰繖涓笉濂戒及璁″鏉傚害鐨勬潵瀹屾垚 瀹為檯鏁堟灉紜疄榪樺緱TLE錛?br>
銆愭垜鐨勫仛娉曚究鏄皢100涓墿鍝佸垎涓?0緇?鏋氫婦姣?0涓墿鍝?鍏堝皢鍙﹀90涓墿鍝佸仛濂藉尯闂磋儗鍖?淇濆瓨榪欎釜絳旀鏁扮粍
鐒跺悗瀵逛簬榪?0涓墿鍝?姣忔娣誨姞9涓墿鍝?/span>
綆椾笅澶嶆潅搴?/span>
鍘熸湰瑕佹斁榪?9*100=9900嬈$墿鍝?/span>
鐜板湪 90*10+9*9*10=2000嬈″乏鍙?鏁存暣鍑忓皯浜?鍊嶏紒銆?br>
瀵逛簬絎簩闂?nbsp; 浜嬪疄涓婃垜浠彲浠ュ彂鐜?nbsp; 娣誨姞Y=(鈭慉i)-X+1榪欎釜鐗╁搧鏄偗瀹氬彲浠ュ皢鏂規鏁板鍔犳渶澶氱殑 鍥犱負
鍋囪鐢∟-1涓墿鍝佽兘寰楀埌鐨勮綆辨暟緇勬槸
1 2 3 4 5 6 7 8 9 10 11 12
o x o o o x o o x o x x ....
閭d箞11蹇呯劧鏄竴涓嬌鏂規鏈澶у彲琛岃В 浜﹀彲鑳芥槸鏈浼樿В
鎵浠ユ垜浠鏋滆鎵句竴涓瘮Y鏇翠紭鐨勮В 蹇呯劧瑕佹弧瓚沖師鏈嫢鏈夌殑鎵鏈夎В鍔犱笂Y' 鍘熸湰閮戒笉鍙錛?br>
榪欐牱灝辨妸闂杞寲涓哄涓嬶細
瀵逛簬涓涓?..700000鐨勫竷灝旀暟緇凙 姹備竴涓渶灝忕殑X
浣垮緱瀵逛簬浠繪剰涓涓猧 A[i]=1 A[i+X]=0銆?br>錛堝緢涓嶅垢闄や簡鏋氫婦X 榪欎竴闂垜涔熶笉浼氬仛 錛?br>
銆愭垜鐨勫仛娉?br>鍏堥澶勭悊鍓嶇紑鍜?nbsp; 鍗充粠1寮濮嬪埌i鑳芥嫾鎴愮殑涓暟
鍏堟妸榪欎釜鏋氫婦鍔犱簺鍓灊 灝嗗師鏉ユ嫾涓嶆垚鐨勯噸閲忚繘琛屾灇涓?br>鍐嶄粠榪欎簺鎷間笉鎴愮殑閲嶉噺閲屾灇涓綳 鍥犱負鍖洪棿鑳屽寘綆楀嚭鏉ョ殑鏄澶氫釜鍖洪棿 鏈鍚庢灇涓捐繖浜涘尯闂?
瀵逛簬涓涓尯闂碵a,b] 濡傛灉X鏄彲琛岀殑閭e繀鐒舵湁 sum(a+X,b+X)=0銆?br>
浜嬪疄涓婅繖涔堝仛灞呯劧灝辮繃浜嗭紒鍥犱負鍖洪棿鏁頒笉澶 鎴戣兘鏋勯犵殑鏈鐗涢肩殑鏁版嵁 涔熷彧鑳?O(300000*5000) 榪欎釜榪樻槸鍕夊己鑳借窇榪囩殑
瀵逛簬瀹樻柟鏁版嵁 姣忎釜鐐歸兘鑳藉湪0.2s鍐呰窇榪囷紒錛?br>
榪欐牱緇堜簬AC浜嗘棰橈紒錛?br>
錛堝彟澶栨眰鏍囧噯鐨勪紭緹庣殑綆楁硶!!!!!!!!!錛?
2 #include <cstring>
3 #include <algorithm>
4 #define n 20005
5 using namespace std;
6 struct Tintv
7 {
8 int x,y;
9 } P[n],Q[n],R[n],Ptmp[n];
10 int len,sum,lentmp,N,M,A[105],list[30];
11 int H[n],v[n],d[n],HLength,S[1400005];
12 bool F[1400005];
13 inline int Calc(int Left,int Right,int u,int v)
14 {
15 R[0].x=R[0].y=-2;
16 for (int l=Left;l<=Right;++l)
17 if (l<u||l>v)
18 {
19 for (int i=1;i<=len;++i)
20 Q[i].x=P[i].x+A[l],Q[i].y=P[i].y+A[l];
21 int r=0;
22 for (int p=1,q=1;p<=len||q<=len;)
23 if (p<=len&&(q>len||P[p].x<Q[q].x))
24 {
25 if (R[r].y+1>=P[p].x) R[r].y=max(R[r].y,P[p].y);
26 else R[++r].x=P[p].x,R[r].y=P[p].y;
27 ++p;
28 }
29 else
30 {
31 if (R[r].y+1>=Q[q].x) R[r].y=max(R[r].y,Q[q].y);
32 else R[++r].x=Q[q].x,R[r].y=Q[q].y;
33 ++q;
34 }
35 for (int i=1;i<=r;++i)
36 P[i]=R[i];
37 len=r;
38 }
39 int tmp=-1;
40 for (int i=1;i<=len;++i)
41 tmp+=P[i].y-P[i].x+1;
42 return tmp;
43 }
44 inline bool check(int u)
45 {
46 for (int i=1;i<=len;++i)
47 if (S[P[i].y+u]-S[P[i].x+u-1]>0) return 0;
48 return 1;
49 }
50 int main()
51 {
52 scanf("%d",&N);
53 for (int i=1;i<=N;++i)
54 scanf("%d",&A[i]),M+=A[i];
55 sort(A+1,A+N+1);
56 int ret=0,Ret=0,tmp;
57 list[++list[0]]=1;
58 for (int i=1;i<=N;i+=10)
59 {
60 tmp=i+10;
61 if (tmp>N) tmp=N+1;
62 list[++list[0]]=tmp;
63 }
64 for (int i=1;i<list[0];++i)
65 {
66 memset(P,0,sizeof(P)),len=1;
67 sum=Calc(1,N,list[i],list[i+1]-1);
68 memcpy(Ptmp,P,sizeof(P));
69 lentmp=len;
70 for (int j=list[i];j<list[i+1];++j)
71 if (A[j]!=A[j-1])
72 {
73 len=lentmp;
74 memcpy(P,Ptmp,sizeof(Ptmp));
75 tmp=Calc(list[i],list[i+1]-1,j,j);
76 if (tmp>Ret) ret=j,Ret=tmp;
77 }
78 }
79 printf("%d ",A[ret]);
80 memset(P,0,sizeof(P)),len=1;
81 Calc(1,N,ret,ret);
82 for (int i=1;i<=len;++i)
83 for (int j=P[i].x;j<=P[i].y;++j)
84 S[j]=1;
85 for (int i=1;i<=1400000;++i)
86 S[i]+=S[i-1];
87 ++len;
88 P[len].x=P[len-1].y+2;
89 P[len].y=1<<30;
90 for (int i=1;i<len;++i)
91 {
92 bool mk=0;
93 for (int j=P[i].y+1;j<P[i+1].x;++j)
94 if (check(j))
95 {
96 ret=j;mk=1;break;
97 }
98 if (mk) break;
99 }
100 printf("%d\n",ret);
101 return 0;
102 }
103
]]>