日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sdut-oj-4205-寻找关键点

發(fā)布時(shí)間:2025/3/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sdut-oj-4205-寻找关键点 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description
現(xiàn)定義關(guān)鍵點(diǎn)為一條鏈中處于中間位置的節(jié)點(diǎn),例如 1 3 4中,3就是這個(gè)整數(shù)鏈中的關(guān)鍵點(diǎn)。

現(xiàn)在小玉得到了一個(gè)整數(shù)鏈,確保鏈中的各個(gè)數(shù)都互不相同且數(shù)列中數(shù)的個(gè)數(shù)為奇數(shù)。

可是,由于小玉的一些特殊要求,她可能會(huì)對(duì)這個(gè)鏈進(jìn)行一些特別的操作。

操作 1 :給定兩個(gè)數(shù)a和b,每次刪除鏈中值為a和值為b兩個(gè)節(jié)點(diǎn)。
操作 2 :給定兩個(gè)數(shù)a和b,每次在鏈中值為1的節(jié)點(diǎn)后插入a,在鏈中值為2的節(jié)點(diǎn)后插入b。
由于小玉特殊的要求,她保證鏈中肯定會(huì)有值為1和2的節(jié)點(diǎn),并且這兩個(gè)節(jié)點(diǎn)永遠(yuǎn)不會(huì)被刪除。保證在插入操作之后鏈中始終不會(huì)有重復(fù)值的節(jié)點(diǎn)。

現(xiàn)在請(qǐng)你寫出一個(gè)程序,幫助小玉找出鏈中的關(guān)鍵點(diǎn)。

Input
只有一組數(shù)據(jù)

先輸入一個(gè)整數(shù)n(10<=n<=100000),且保證n一定為奇數(shù)

接下來(lái)輸入n個(gè)互不相同的整數(shù)num(1<=num<=10000000)

接著下一行輸入一個(gè)整數(shù)m(1<=m<=4000)

代表接下來(lái)有m行

每行有3個(gè)數(shù)aa,bb,cc. 其中第一個(gè)數(shù)aa表示操作類型,aa為1代表刪除鏈中值為bb和cc的數(shù),

aa為2代表在鏈中值為1的節(jié)點(diǎn)后增加值為bb的節(jié)點(diǎn),在鏈中值為2的節(jié)點(diǎn)后增加值為cc的節(jié)點(diǎn)。

(保證刪除的節(jié)點(diǎn)在鏈中一定有,保證插入的節(jié)點(diǎn)與鏈中已有節(jié)點(diǎn)不會(huì)重復(fù))

Output
對(duì)于每次操作,輸出一個(gè)值h,代表操作完成后鏈中的關(guān)鍵點(diǎn)。

Sample
Input
5
1 3 4 5 2
2
1 3 4
2 3 4
Output
5
5

#include<bits/stdc++.h>using namespace std;int n;typedef struct node {int data;struct node *next; } List;List *creat(int n) {List *head, *tail, *p;head = new List;head->next = NULL;tail = head;for(int i = 0; i < n; i++){p = new List;scanf("%d", &p->data);p->next = NULL;tail->next = p;tail = p;}return head; }void List_one(List *head, int a, int b) {List *p, *q;p = head;q = head->next;while(q->next)//刪除某一元素,都是找到他的前一個(gè)元素{if(q->data == a){p->next = q->next;free(q);q = p->next;n--;}else if(q->data == b){p->next = q->next;free(q);q = p->next;n--;}else//沒(méi)有相匹配的,往下移動(dòng){p = q;q = q->next;}}if(q->next == NULL)//進(jìn)行特判,判斷是否要?jiǎng)h除的結(jié)點(diǎn)位于表尾{if(q->data == a){p->next = q->next;free(q);n--;}else if(q->data == b){p->next = q->next;free(q);n--;}} }void List_two(List *head, int a, int b) {List *p, *q;p = head->next;while(p)//注意與刪除操作不的不同點(diǎn){if(p->data == 1){q = new List;q->data = a;q->next = p->next;p->next = q;n++;}if(p->data == 2){q = new List;q->data = b;q->next = p->next;p->next = q;n++;}p = p->next;} }int findkey(List *head, int n)//基操,不多解釋 {List *p;int m, k;m = n / 2 + 1;p = head->next;k = 1;while(k != m){p = p->next;k++;}return p->data; }int main() {int a, b, m, num, key;List *head;scanf("%d", &n);head = creat(n);scanf("%d", &m);while(m--){scanf("%d%d%d", &num, &a, &b);if(num == 1){List_one(head, a, b);}else{List_two(head, a, b);}key = findkey(head, n);printf("%d\n", key);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的sdut-oj-4205-寻找关键点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。