時間限制
300 ms
記憶體限制
65536 kb
**長度限制
8000 b
判題程式
standard
作者 chen, yue
給定乙個常數k以及乙個單鏈表l,請編寫程式將l中每k個結點反轉。例如:給定l為1→2→3→4→5→6,k為3,則輸出應該為3→2→1→6→5→4;如果k為4,則輸出應該為4→3→2→1→5→6,即最後不到k個元素不反轉。
輸入格式:
每個輸入包含1個測試用例。每個測試用例第1行給出第1個結點的位址、結點總個數正整數n(<= 105)、以及正整數k(<=n),即要求反轉的子鏈結點的個數。結點的位址是5位非負整數,null位址用-1表示。
接下來有n行,每行格式為:
address data next
其中address是結點位址,data是該結點儲存的整數資料,next是下一結點的位址。
輸出格式:
對每個測試用例,順序輸出反轉後的鍊錶,其上每個結點佔一行,格式與輸入相同。
輸入樣例:
00100 6 4輸出樣例:00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
00000 4 33218思路:33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
輸入的是5位的非負整數,所以直接用int型儲存,用%05d保持前導0輸出就可以了,這樣位址就可以直接是位址下標。然後計算有效節點個數(題意沒說,剛開始沒有計算有效節點個數,一直錯最後一組資料),因為是根據k的值反轉鍊錶,所以就cnt剛開始初始化為k,因為第一位剛好對應反轉後的第k位,後面只需要cnt遞減,i遞增,當i == k時 cnt 就要重新計算了計算公式為: cnt = k * (i / k + 1);
/*
pat
注意輸入可能有無效節點,如第七個節點並不在鍊錶上
00100 7 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
55555 8 44444
*/#include #include #include #include #include #include using namespace std;
#define maxn (int)1e6+5
struct nodearr[maxn], ans[maxn];
int main()
ad = root;
while (ad != -1)
ad = root;
int cnt = k;
for (int i = 1;i <= count_node; i++)}}
} for (int i = 1; i < count_node; i++)
printf("%05d %d -1\n", ans[count_node].add, ans[count_node].x);
} return 0;
}
PAT乙級訓練題 1002
讀入乙個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100。輸出格式 在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後乙個拼音數字後沒有空格。輸入樣例 123456789098765...
PAT乙級1055集體照
很簡單,利用優先佇列即可,輸入時自動排序 這裡根據題意的從大到小排序來排序 過載 號即可 include include include using namespace std typedef struct student 按照過載後小於規則來進行less 或者greater stu void ta...
PAT乙級 1055 集體照
1055 集體照 25分 拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下 每排人數為 n k 向下取整 多出來的人全部站在最後一排 後排所有人的個子都不比前排任何人矮 每排中最高者站中間 中間位置為 m 2 1,其中 m 為該排人數,除法向下取整 每排其他人以中間人為軸,...