锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鎵璋撻嗗簭鏁幫紝灝辨槸鎸囦竴涓簭鍒桽[i]錛岀粺璁″浜庡簭鍒楃殑姣忎釜鏁扮殑姣旇繖涓暟澶у茍涓旀帓鍦ㄥ畠鍓嶉潰鐨勬暟鐨勬暟鐩紝鐒跺悗瀵逛簬鎵鏈夋暟錛屾妸榪欎釜鏁扮洰鍔犺搗鏉ユ眰鍜屽氨鏄簡銆?br />姣斿 4 3 1 2 姹傞嗗簭鏁扮殑涓ょ鏂規硶 濡備綍淇敼褰掑茍鎺掑簭姹傞嗗簭鏁? 閭d箞瀵逛簬涓鍗婄殑搴忓垪鍙堟庝箞鍋氬憿錛熸垜浠煡閬擄紝褰掑茍鎺掑簭浼氱戶緇悜涓嬮掑綊錛岃岄掑綊瀹屾垚榪斿洖鍚庡皢鏄袱緇勬湁搴忕殑搴忓垪錛屽茍涓旀嬁鍒板眬閮ㄧ殑閫嗗簭鏁幫紝 榪欓噷涓昏鍒╃敤鏍戠姸鏁扮粍瑙e喅璁℃暟闂銆?/p>
棣栧厛鎸夐『搴忔妸搴忓垪a[i]姣忎釜鏁版彃鍏ュ埌鏍戠姸鏁扮粍涓紝鎻掑叆鐨勫唴瀹規槸1錛岃〃紺烘斁浜嗕竴涓暟鍒版爲鐘舵暟緇勪腑銆?br />鐒跺悗浣跨敤sum鎿嶄綔鑾峰彇褰撳墠姣攁[i]灝忕殑鏁幫紝閭d箞褰撳墠i - sum鍒欒〃紺哄綋鍓嶆瘮a[i]澶х殑鏁幫紝濡傛鍙嶅鐩村埌鎵鏈夋暟閮界粺璁″畬錛?br />姣斿 榪囩▼寰堟槑浜嗭紝鎵浠ラ嗗簭鏁頒負1+2+2=5
]]>
]]>
]]>
姹傛暟鍒楃i欏?nbsp;0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9
瑙f硶錛氭寜鐓ч鐩姹傞掓帹鍗沖彲
#include <string.h>
bool visited[4000005];
int nums[4000005];
void pre()
{
memset(visited,0,sizeof(visited));
memset(nums,0,sizeof(nums));
visited[0] = true;
for (int i = 1; i <= 500000; ++i)
{
int k = nums[i-1] - i;
if (k <=0 || visited[k])
{
nums[i] = nums[i-1] + i;
visited[nums[i]] = true;
}
else
{
nums[i] = nums[i-1] - i;
visited[nums[i]] = true;
}
}
}
int main()
{
pre();
int n;
while(scanf("%d",&n) != EOF)
{
if (n == -1)
{
break;
}
printf("%d\n",nums[n]);
}
return 0;
}
2250
2 #include <string.h>
3 #include <string>
4 #include <vector>
5 using namespace std;
6
7 string strs1[128];
8 int len1;
9 string strs2[128];
10 int len2;
11 int dp[128][128];
12 int flags[128][128];//1 涓?nbsp;2 宸?nbsp;3 瀵硅
13
14 void Test()
15 {
16 memset(dp,0,sizeof(dp));
17 memset(flags,0,sizeof(flags));
18 for (int i = 1; i <= len1; ++i)
19 {
20 for (int j = 1; j <= len2; ++j)
21 {
22 if (strs1[i] == strs2[j])
23 {
24 dp[i][j] = dp[i-1][j-1] + 1;
25 flags[i][j] = 3;
26 }
27 else
28 {
29 int m1 = dp[i-1][j];
30 int m2 = dp[i][j-1];
31 if (m1 < m2)
32 {
33 dp[i][j] = m2;
34 flags[i][j] = 2;
35 }
36 else
37 {
38 dp[i][j] = m1;
39 flags[i][j] = 1;
40 }
41 }
42 }
43 }
44 int pos1 = len1;
45 int pos2 = len2;
46 vector<string> vec;
47 while(true)
48 {
49 if (flags[pos1][pos2] == 3)
50 {
51 vec.push_back(strs1[pos1]);
52 --pos1;
53 --pos2;
54 }
55 else if (flags[pos1][pos2] == 2)
56 {
57 --pos2;
58 }
59 else if (flags[pos1][pos2] == 1)
60 {
61 --pos1;
62 }
63 else
64 break;
65 }
66 for (int i = vec.size()-1; i >=0 ; --i)
67 {
68 cout << vec[i];
69 if (i == 0)
70 {
71 cout << endl;
72 }
73 else
74 {
75 cout << " ";
76 }
77 }
78 }
79
80 int main()
81 {
82 //freopen("data.txt","r",stdin);
83 string input;
84 int k = 0;
85 len1 = len2 = 0;
86 while(cin >> input)
87 {
88 if (input == "#")
89 {
90 if (k == 1)
91 {
92 Test();
93 k = 0;
94 len1 = len2 = 0;
95 continue;
96 }
97 else
98 {
99 k = 1;
100 }
101 }
102 if (k == 0)
103 {
104 strs1[++len1] = input;
105 }
106 else
107 {
108 strs2[++len2] = input;
109 }
110 }
111 return 0;
112 }
]]>
]]>
]]>
4絎竴涓紝鎵浠ユ暟鐩負0
3鐨勫墠闈㈡槸4錛屽ぇ浜?鐨勬暟鐩負1
1鐨勫墠闈㈡槸4 3 錛屽ぇ浜?鐨勬暟鐩負2
2鐨勫墠闈㈡槸4 3 1錛屽ぇ浜?鐨勬暟鐩負2
鎵浠ラ嗗簭鏁頒負1+2+2 = 5
甯歌鏂規硶鏄寜鐓ч嗗簭鏁扮殑瑙勫垯鍋氾紝緇撴灉澶嶆潅搴︽槸O(n*n)錛屼竴鑸潵璇達紝鏈変袱縐嶅揩閫熺殑姹傞嗗簭鏁扮殑鏂規硶
鍒嗗埆鏄綊騫舵帓搴忓拰鏍戠姸鏁扮粍娉?/p>
2. 褰掑茍鎺掑簭
褰掑茍鎺掑簭鏄簮浜庡垎鑰屾不涔嬫濇兂錛岃緇嗙殑榪囩▼鍙互鏌ラ槄鍏朵粬璧勬枡錛屾諱綋鎬濇兂鏄垝鍒嗕竴鍗婏紝鍚勮嚜鎺掑ソ搴忓悗灝嗕袱涓湁搴忓簭鍒楀悎騫惰搗鏉ャ?/p>
棣栧厛鎴戜滑鍋囪涓や釜鏈夊簭搴忓垪 a[i]鍜宐[i]錛屽綋鍚堝茍鏃訛細
鐢變簬a[i]宸叉槸鏈夊簭錛屾墍浠ュ浜巃[i]鐨勫悇涓厓绱犳潵璇達紝鎺掑湪瀹冨墠闈笖姣斿畠澶х殑鏁扮洰閮芥槸0
褰揵[i]涓惈鏈夋瘮a[i]灝忕殑鍏冪礌鏃訛紝鎴戜滑蹇呯劧灝哹[i]鍏冪礌鎻掑埌鍓嶉潰錛岄偅涔堝氨鏄錛屽湪b[i]鍘熷厛浣嶇疆鍒拌鎻掔殑浣嶇疆涓紝鎵鏈夋暟閮芥瘮b[i]澶т笖鎺掑湪瀹冨墠闈?br />鎵浠ヨ繖鏄痓[i]鐨勬暟鐩負鏂版彃鍏ヤ綅緗畁ewPos - 鍘熸潵浣嶇疆oldPos
鎵浠ュ湪Merge鍑芥暟涓坊鍔犺繖涓璁℃暟鎿嶄綔鍗沖彲int L[M];
int R[M];
const int Max = 1 <<30;
__int64 change = 0;
void Merge(int *data,int left,int divide,int right)
{
int lengthL = divide - left;
int lengthR = right - divide;
for(int i = 0; i < lengthL; ++i)
{
L[i] = data[left + i];
}
for(int i = 0; i < lengthR; ++i)
{
R[i] = data[divide + i];
}
L[lengthL] = R[lengthR] = Max;
int i = 0;
int j = 0;
for(int k = left; k < right; ++k)
{
if(L[i] <= R[j])
{
data[k] = L[i];
++i;
}
else
{
change += divide - i - left ;
data[k] = R[j];
++j;
}
}
}
void MergeSort(int *data,int left,int right)
{
if(left < right -1)
{
int divide = (left + right)/2;
MergeSort(data,left,divide);
MergeSort(data,divide,right);
Merge(data,left,divide,right);
}
}
3. 鏍戠姸鏁扮粍
姹傞嗗簭鏁扮殑鍙﹀涓縐嶆柟娉曟槸浣跨敤鏍戠姸鏁扮粍
瀵逛簬灝忔暟鎹紝鍙互鐩存帴鎻掑叆鏍戠姸鏁扮粍錛屽浜庡ぇ鏁版嵁錛屽垯闇瑕佺鏁e寲錛屾墍璋撶鏁e寲錛屽氨鏄皢
100 200 300 400 500 ---> 1 2 3 4 5
4 3 1 2
i = 1 : 鎻掑叆 4 : update(4,1)錛宻um(4)榪斿洖1錛岄偅涔堝綋鍓嶆瘮4澶х殑涓?i - 1 = 0;
i = 2 : 鎻掑叆 3 : update(3,1)錛宻um(3)榪斿洖1錛岄偅涔堝綋鍓嶆瘮3澶х殑涓?i - 1 = 1;
i = 3 : 鎻掑叆 1 : update(1,1)錛宻um(1)榪斿洖1錛岄偅涔堝綋鍓嶆瘮1澶х殑涓?i - 1 = 2;
i = 4 : 鎻掑叆 2 : update(2,1)錛宻um(2)榪斿洖2錛岄偅涔堝綋鍓嶆瘮2澶х殑涓?i - 2 = 2;
浠g爜紺轟緥濡備笅錛?/p>
//鏍戠姸鏁扮粍
__int64 sums[1005];
int len;
inline int lowbit(int t)
{
return t & (t^(t-1));
}
void update(int _x,int _value)
{
while(_x <= len)
{
sums[_x] += _value;
_x += lowbit(_x);
}
}
__int64 sum(int _end)//get sum[1
_end]
{
__int64 ret = 0;
while(_end > 0)
{
ret += sums[_end];
_end -= lowbit(_end);
}
return ret;
}
//姹傞嗗簭鏁?/span>
__int64 ret = 0;
for (__int64 i = 0; i < k; ++i)
{
update(a[i],1);
ret += (i+1) - sum(a[i]);
}
姹傞嗗簭鏁扮殑棰樼洰鏈夛細
http://poj.org/problem?id=2299
http://poj.org/problem?id=3067
]]>
]]>
2.娉ㄦ剰褰搆==1鏃訛紝k-1 == 0錛岄渶瑕佺壒孌婂鐞嗭紝鐩存帴鎵撳嚭ans = maxV
3.娉ㄦ剰褰撴眰left+right鏃訛紝緇撴灉鍙兘瓚呭嚭鑼冨洿錛屾紜殑鏂規硶搴旇鏄痩eft + (right - left)*0.5;
#include <stdio.h>
const int N = 100005;
int n;
int a[N];
int k;
bool check(int _value)
{
int cnt = 0;
for (int i = 0; i < n; ++i)
{
if (a[i] > _value)
{
double kk = ((double)(a[i] - _value))/(k-1);
cnt += (int)kk;
if (kk - (int)kk > 0)
{
++cnt;
}
if (cnt > _value)
{
return false;
}
}
}
return (cnt <= _value);
}
int BinarySearch(int _low,int _high)
{
int left = _low;
int right = _high;
int mid;
int ans = _high;
while(left <= right)
{
mid = (left+(right-left)*0.5);
if (check(mid))
{
ans = mid;
right = mid - 1;
}
else
{
left = mid + 1;
}
}
return ans;
}
void Test()
{
int maxV = 0;
for (int i = 0; i < n; ++i)
{
scanf("%d",&a[i]);
if (maxV < a[i])
{
maxV = a[i];
}
}
scanf("%d",&k);
if (k == 1)
{
printf("%d\n",maxV);
}
else
printf("%d\n",BinarySearch(0,maxV));
}
int main()
{
while(scanf("%d",&n) != EOF)
{
Test();
}
return 0;
}
]]>
]]>
]]>
棰樿В錛?br />鍒氬紑濮嬬洿鎺ユ墜鎵撻摼琛ㄦā鎷燂紝緇撴灉瓚呮椂銆傝繖鏃跺簲浣跨敤鍙﹀涓縐嶆柟娉曪細浣跨敤澶ч《鍫嗗拰灝忛《鍫嗐?br />鍏朵腑錛屽浜庡簭鍒桽[1..n]錛屽強琛ㄧず榪唬鍣ㄤ綅緗殑index錛屽ぇ欏跺爢緇存姢鎺掑簭鍚庣殑S[1..index-1]錛屽皬欏跺爢緇存姢
鎺掑簭鍚庣殑S[index..n],渚嬪S[1..n] = 1,2,3,4,5,6,7錛宨ndex = 4錛屽垯澶ч《鍫嗕負{1,2,3}錛屽皬欏跺爢涓簕4,5,6,7}
涓轟粈涔堣榪欐牱緇存姢鍛紵鍥犱負褰撳皬鍫嗘渶灝忕殑鍏冪礌閮藉ぇ浜庡ぇ鍫嗘渶澶х殑鍏冪礌鏃訛紝閭d箞搴忓垪涓帓絎琻涓氨鏄皬鍫嗘渶灝忕殑鏁頒簡銆?br />鎴戜滑鍋囪絎琸瓚烥ET()鍚庯紝鏈変互涓嬫儏鏅?GET鍚巏鑷姩鍔?)錛?br />澶ч《鍫嗭細S[1..k]錛屽爢欏跺厓绱犱負S[k]錛屽皬欏跺爢錛歋[k+1,n]錛屽爢欏跺厓绱犱負S[k+1]錛岀劧鍚庢瘡褰撴坊鍔犱竴涓厓绱爊ewE鏃訛紝鍏堟坊鍔犲埌澶ч《鍫嗕腑錛岃繖鏃跺鏋滃嚭鐜板ぇ欏跺爢鏁板ぇ浜庡皬欏跺爢鐨勬暟鏃訛紝鐞嗗簲浜ゆ崲銆?br />浠g爜錛?
#include <queue>
#include <stdio.h>
using namespace std;
int m,n;
int sequence[30005];
struct cmp1
{
bool operator()(const int a,const int b)
{
return a>b;
}
};
struct cmp2
{
bool operator()(const int a,const int b)
{
return a<b;
}
};
void Test()
{
priority_queue<int,vector<int>,cmp1>q1;//灝忓爢
priority_queue<int,vector<int>,cmp2>q2;//澶у爢
for (int i = 0; i < m; ++i)
{
scanf("%d",&sequence[i]);
}
int op;
int k = 0;
for (int i = 0; i < n; ++i)
{
scanf("%d",&op);
while(k < op)
{
q1.push(sequence[k]);
if (!q2.empty() && q1.top() < q2.top())
{
int t1 = q1.top();
q1.pop();
int t2 = q2.top();
q2.pop();
q1.push(t2);
q2.push(t1);
}
++k;
}
printf("%d\n",q1.top());
q2.push(q1.top());
q1.pop();
}
}
int main()
{
while(scanf("%d %d",&m,&n) != EOF)
{
Test();
}
return 0;
}
]]>
]]>
]]>
]]>
]]>
]]>
棰樼洰澶ф剰錛?鍦╪*m鎺掔潃n*n涓+鍏碉紝浼戞伅鏃舵暎寮(鍙兘姘村鉤鏁e紑)錛岄泦涓椂瑕侀噸鏂扮珯鎴恘*n鏂歸樀錛屾眰鎬諱綋鏈灝戠Щ鍔ㄦ鏁?br>棰樿В錛氭敞鎰忔槸鍙兘姘村鉤鏁e紑錛屾墍浠ヨ棰樹篃鎴愪負姘撮浜?br>1.鎺掑簭
2.鏋氫婦宸﹁竟鎺掑紑濮嬬珯鐨勫垪鏁幫紝妯℃嫙璁$畻姣忔绔欑殑鑺辮垂
3.杈撳嚭鏈灝忚姳璐?br>
浠g爜錛?br>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int n,m;
struct Point
{
int x;
int y;
friend bool operator < (const Point &_p1,const Point & _p2)
{
if(_p1.x == _p2.x)
return _p1.y < _p2.y;
else
return _p1.x < _p2.x;
}
};
Point points[3600];
void Test()
{
int size = n*n;
int x1,y1;
for(int i = 0; i < size; ++i)
{
scanf("%d %d",&x1,&y1);
points[i].x = x1;
points[i].y = y1;
}
sort(points,points+size);
int ans = 1 << 30;
//鏋氫婦鍒楁暟
for(int i = 1; i <= m-n+1; ++i)
{
int ans2 = 0;
int k = 0;
//n*n甯冨眬
for(int x = 0; x < n; ++x)
{
for(int y = 0; y < n; ++y)
{
//姘村鉤鐩稿噺
ans2 += abs(i+y - points[k].y);
++k;
}
}
ans = min(ans,ans2);
}
printf("%d\n",ans);
}
int main()
{
while(scanf("%d %d",&n,&m) != EOF)
{
if(n == 0 || m == 0)
break;
Test();
}
return 0;
}
]]>
]]>
]]>
]]>
棰樻剰錛?/strong>緇欏畾涓ゆ暟n錛宮(0< n,m < 10^500)錛岃姹傜敤涓夌鎿嶄綔(-,+,*2)瀹屾垚浠巑鍙樻崲鍒皀
棰樿В錛?/strong>鍜嬬溂鐪嬭繕浠ヤ負鏄畝鍗曟按棰橈紝http://poj.org/problem?id=3278 灝辨槸榪欓鐨勫師濮嬬増錛?br>騫朵笖榪欎釜棰樼洰涓嬮潰榪樼櫧綰擱粦瀛楀啓鏄?0<N,M<10500)錛屽寙蹇欏啓涓狟FS鎻愪氦錛岀粨鏋淩E錛屽叾瀹為鐩殑鏁版嵁鑼冨洿
搴旇鏄?<N,M<10^500銆傘傘?br>鏆存悳琛屼笉閫氾紝灝辮鏈変釜濂界偣鐨勬柟娉曪紝鎯充簡涓涓嬫兂涓嶅埌錛岀粨鏋滅湅浜嗕釜瑙i鎶ュ憡錛屾墠鐭ラ亾鎬庝箞瑙e喅
濡傛灉m > n錛氬彧鏈夊噺鎿嶄綔
濡傛灉n > m錛氬彲浠ヤ粠鍚庡線鍓嶆帹綆楋細
璁緁(x,n)琛ㄧず鏁皒鍙樻崲鍒皀闇瑕佺殑姝ユ暟 f(x,n)
閭d箞濡傛灉x涓哄鏁幫細f(x,n) = f(x/2,n) + 2
濡傛灉x涓哄伓鏁?錛歠(x,n) = f(x/2,n) + 1
褰撳墠絳旀鍗充負 abs(m-x) + f(x,m)
涓鐩磋綆楃洿鍒?*x > m 銆?br>鍙渶瑕佽綆梮鍜寈+1鐨勬鏁板嵆鍙紝濡備綍璇佹槑錛?br>浠ヤ笅浠?x,n,y)琛ㄧず錛屽叾涓瓂 = f(x,n)
鍒嗗埆璁ㄨx鍜寈+1鐨勫鍋舵э紝(x/2,n,y1)鍜?(x+k)/2,n,y2)鐨勫ぇ灝?浣滃樊)
緇撴灉鍙戠幇褰搆>=2鏃訛紝y2 > y1銆?br>
鐢變簬瑕佸ぇ鏁幫紝鎵浠ョ敤java姣旇緝鏂逛究銆傘傘?br>
浠g爜錛?br>