鏈接:
http://poj.grids.cn/practice/2818這其實就是一個簡單的移位密碼算法題,只是多了個循環而已,密碼學里面也指出過循環運算是沒有效果的,所以題目估計也就考察了這一點,如果沒有找出循環周期,此題會一直超時的...
剛開始,我就直接模擬K次加密,顯然超時了,當時還不信了,以為簡單至此。。。
后面我就開始改進了,剛開始是把周期計算和加密放在一起寫了,樣例也過了,但是還是一直錯...
沒辦法再改,我改成把周期求出來,再對加密次數K取模后,再進行運算...
好吧,還是一樣wa,后面就變成PE了。。。
最后,這個題經過我近2個小時的奮戰,終于過了,一共錯了近10次吧...第一次提交是距現在1個多小時前了...
最后發現錯誤的原因還是換行輸出的地方錯了,題目要求是每一組中間有個空行,我則輸出的是每次計算后有個空行...
實在無語...
思維不嚴謹啊...
代碼:
#include <stdio.h>
#include <string.h>
#define N_MAX 200 + 10
int main()
{
int nN = 0;
int nNArr[N_MAX];//密鑰
int nK = 0;
char szMsg[N_MAX];
char szMsgBckup[N_MAX];//字符串備份
int nCir[N_MAX];//周期
int nMsgLen = 0;
int nPos = 0;
int i, j;
while (scanf("%d", &nN), nN != 0)
{
for (i = 1; i <= nN; ++i)
{
scanf("%d", &nNArr[i]);
}
for (i = 1; i <= nN; ++i)//計算周期
{
nPos = i;
for (j = 1; ; ++j)
{
nPos = nNArr[nPos];
if (nPos == i)
{
nCir[i] = j;
break;
}
}
}
while (scanf("%d", &nK), nK != 0)
{
getchar();//銷掉空格
gets(szMsg + 1);
nMsgLen = strlen(szMsg + 1);
for (i = nMsgLen; i < nN; ++i)
{
szMsg[1 + i] = ' ';
}
szMsg[1 + nN] = '\0';
strcpy(szMsgBckup + 1, szMsg + 1);
for (i = 1; i <= nN; ++i)
{
nPos = i;
int nTimes = nK % nCir[i];
for (j = 1; j <= nTimes; ++j)
{
nPos = nNArr[nPos];
}
szMsg[nPos] = szMsgBckup[i];
}
printf("%s\n", szMsg + 1);
}
printf("\n");
}
return 0;
}
鏈接:
http://poj.grids.cn/practice/1017
說實話這就是個簡單的裝箱子問題,很容易想清楚裝箱子的過程,而且這個過程是滿足貪心算法的,
所以只需要用代碼模擬整個裝箱子的過程即可,但是這樣真的就足夠了嗎???
我剛開始就是用代碼模擬這個手動過程了,雖然AC了,但是代碼有150行左右,邏輯也顯得過于復雜了,
得不償失。。。整個過程是6*6的一個占一個箱子,5*5的也必須一個占一個箱子,但是需要補11個1*1的,
4*4的也是一個占一個箱子,但是需要補5個2*2的,如果2*2的不足夠,則用1*1的代替,
3*3的4個占一個箱子,但是會有余數,可能余下1,2,3個3*3的箱子,這個時候必須非情況考慮,
1個3*3的需要和5個2*2的,7個1*1的組合,2個3*3的需要和3個2*2的,6個1*1的組合,
3個3*3的需要和1個2*2的,5個1*1的組合,最后考慮9個2*2的裝一個箱子,多余的2*2用1*1的去填充盡量擠滿一個箱子,
最后36個1*1的裝一個箱子,余下的1*1的也必須占一個箱子。。。
這個過程說出來已經非常復雜了,更何況用代碼寫,我費了九牛二虎之力才寫出來,WA了一次才AC了...
代碼:
#include <stdio.h>
int main()
{
int one, two, three, four, five, six;
int num = 0;
while (scanf("%d%d%d%d%d%d", &one, &two, &three, &four, &five, &six) == 6)
{
if (one == 0 && two == 0 && three == 0 && four == 0 && five == 0 && six == 0)
{
break;
}
num = six;
num += five;
if (one > five * 11)
{
one -= five * 11;
}
else
{
one = 0;
}
num += four;
if (two > four * 5)
{
two -= four * 5;
}
else
{
if (one > four * 5 * 4 - two * 4)
{
one -= four * 5 * 4 - two * 4;
}
else
{
one = 0;
}
two = 0;
}
num += three / 4;
three = three % 4;
if (three == 1)
{
if (two > 5)
{
two -= 5;
if (one > 7)
{
one -= 7;
}
else
{
one = 0;
}
}
else
{
if (one > 27 - two * 4)
{
one -= 27 - two * 4;
}
else
{
one = 0;
}
two = 0;
}
++num;
}
if (three == 2)
{
if (two > 3)
{
two -= 3;
if (one > 6)
{
one -= 6;
}
else
{
one = 0;
}
}
else
{
if (one > 18 - two * 4)
{
one -= 18 - two * 4;
}
else
{
one = 0;
}
two = 0;
}
++num;
}
if (three == 3)
{
if (two > 1)
{
two -= 1;
if (one > 5)
{
one -= 5;
}
else
{
one = 0;
}
}
else
{
if (one > 9 - two * 4)
{
one -= 9 - two * 4;
}
else
{
one = 0;
}
two = 0;
}
++num;
}
num += two / 9;
two = two % 9;
if (two)
{
if (one > 36 - two * 4)
{
one -= 36 - two * 4;
}
else
{
one = 0;
}
++num;
}
num += one / 36;
if (one % 36)
{
++num;
}
printf("%d\n", num);
}
return 0;
}
這樣的寫法顯然不好吧。。。首先,余下1,2,3個3*3時候需要填幾個2*2的可以存儲在數組里面,這樣就可以不用寫重復代碼了,
如果再從整體考慮余下多少個格子,就不用用貪心算法模擬裝箱子的過程了。。。
代碼如下:
#include <stdio.h>
int main()
{
int one, two, three, four, five, six;
int num = 0;
int twoPlace[4] = {0, 5, 3, 1};
int remTwo, remOne;
while (scanf("%d%d%d%d%d%d", &one, &two, &three, &four, &five, &six) == 6)
{
if (one == 0 && two == 0 && three == 0 && four == 0 && five == 0 && six == 0)
{
break;
}
num = six + five + four + (three + 3) / 4;
remTwo = four * 5 + twoPlace[three % 4];
if (two > remTwo)
{
num += (two - remTwo + 8) / 9;
}
remOne = 36 * num - 36 * six - 25 * five - 16 * four - 9 * three - 4 * two;
if (one > remOne)
{
num += (one - remOne + 35) / 36;
}
printf("%d\n", num);
}
return 0;
}
這個blog的申請時間估計已經有1個多星期了。。。那是在我最無聊的時刻吧。。。從前天起的前面6天外出旅行了,用的是生物能,用我們自己的雙腳踩車去了新寧崀山。從長沙到哪里也有300多公里。想起這6天的種種,收獲頗豐。我也不是來寫這篇游記的,所以這次旅行也不想說得過多了。
我以后會很少在 qzone 和 人人 以及 百度空間 上更新任何文章了。不管是發牢騷還是記錄些學習感悟,都不會寫在那上面了。如果有熟人有心看到過我這個blog的話,就不必要去看其它地方的了,那里只有我以前的胡亂感受。
一恍大學過了3年多了,大四了,保研也確定了3個多星期了。前2個星期,則完全是在宿舍宅了半個月。第三個星期,鼓起勇氣出去旅行。說實話,一直到那天早上我都猶豫要不要去的了。后面的3天,基本上每天都有12小時在路上奔走。第一天非常難受,剛過猴子石大橋就感覺受不了了,還好出城的時候走的慢,一直跟在李后面。。。出城后,到暮云,到湘潭,那個上午就感覺用夠了全部力量了。下午開走前,真的懷疑過接下來該怎么辦。。。在路上的那種難受感覺說也說不出來,其實我身體很虛的那種。在宿舍宅了3年多,生活沒有規律,飲食也不夠。第一天真的非常難受。走不動的時候,我老是想一些這幾年讓我痛不欲生的事情,我永遠也無法改變無法解決,但是又最后會把錯誤歸咎到自己身上的事情。真的痛不欲生。。。也許,這就是生命。生命就是一場旅行,雖然很痛,但是沿途還有風景,這種旅行本身就具備了最大的意義。
真的是萬事開頭難,第二天就沒有那么強烈的感覺了。雖然,還是沒有力氣,還是很難受,但是還是稍微適應了點了。堅持才是勝利,這句話在這個時候很對。第三天,我完全感覺跟前面2天不同了,這一天我能夠騎到前面去了,雖然這一天的路最爛,最陡。。。不要以為成功就是那么容易,即使經過3天的艱苦車行。我們還是沒有到達目的地,我們只是到了新寧的一個鎮,離縣城還是有50多公里,這邊路這么爛,基本上在修的爛國道,而且還帶盤山的那種。第四天,只能做中吧去了,坐車時候受到了鄙視比騎車時更多,車放在里面而不是后備箱確實礙著太多人了,農村里面的車也擠成那樣了,我也一直不會說什么好話。。。第四天,我們終于出了縣城到了景區。到景區大門的時候,就開始虛脫了,不是因為長途跋涉,而是因為腸胃不好,發作了,拉了個肚子之后整個人就虛脫了。唉,確實不是這么容易啊。。。
第四天我們看了一個景區,第五天看了二個更爽的景區,每天基本也是活動12小時以上。感謝住的地方那么干凈,老板娘做的菜也那么好吃。如果再去一定會住那里,也會向別人推薦那里。那個家庭賓館我們還拍了照。一路所有的照片都在qq空間里面了。。。
說了不寫游記的,我還是寫了這么多的。。。這篇游記如果真的認真寫實在太長了,一路也沒有記日記。這5天多的感受,比我大學里面任何時間的感覺受激烈很多。我收獲了很多很多。本來就打算以此作為開始,重開我的人生的。這輩子做過太多不堪的事情了,是時候為了自己,不受任何世俗觀念影響做點事情了。。。