UVA12657解題報告

2021-08-03 06:25:52 字數 2391 閱讀 2333

ac** time 80ms

#include#includeusing namespace std;

const int maxn=100000+10;

int left[maxn],right[maxn],inv;

void link(int l,int r)

long long number(int n)

if(inv && n%2==0) total=(long long)n*(n+1)/2-total;

return total;

}int main()

right[0]=1; left[0]=n;

inv=0;

while(m--)

scanf("%d %d",&x,&y);

if(order==3 && right[y]==x) swap(x,y); //x,y相鄰時要進行特殊考慮

if(order!=3 && inv) order=3-order;

if(order==1 && left[y]==x) continue;

if(order==2 && right[y]==x) continue;

int lx,rx,ly,ry;

lx=left[x]; rx=right[x]; ly=left[y]; ry=right[y];

if(order==1)

else if(order==2)

else if(order==3)

else }}

printf("case %d: %lld\n",t++,number(n));

}return 0;

}

開始用鍊錶做的超限**(實際上也是錯誤的)

#include#includeusing namespace std;

int reverse;

typedef struct nodenode,*lnode;

void init(lnode &head,int n,lnode &rear)

}int locate(lnode l,lnode &p,lnode &q,int x,int y)

if(k->id==y)

k=k->next;

}}void right(lnode &head,int x,int y)

void left(lnode &head,int x,int y)

void replace(lnode &head,int x,int y)

long long sum(lnode head,lnode rear)

}else

}return ans;

}void print(lnode head)

printf("\n");

}int main()

int x,y;

scanf("%d %d",&x,&y);

switch(order)

}printf("case %d: %lld\n",test++,sum(head,rear));

}return 0;

}

錯誤的**,1,2操作沒有考慮到已經排好序的情況,3沒有考慮x,y相鄰的情況,**下面給出一組對於3操作出錯的資料

#include#includeusing namespace std;

const int maxn=100000+10;

int left[maxn],right[maxn],inv;

void link(int l,int r)

long long number(int n)

if(inv && n%2==0) total=(long long)n*(n+1)/2-total;

return total;

}int main()

right[0]=1; left[0]=n;

inv=0;

while(m--)

scanf("%d %d",&x,&y);

if(order!=3 && inv) order=3-order;

int lx,rx,ly,ry;

lx=left[x]; rx=right[x]; ly=left[y]; ry=right[y];

if(order==1)

else if(order==2)

else if(order==3)

}printf("case %d: %lld\n",t++,number(n));

}return 0;

}/*錯誤資料

4 13 2 3

正確答案 3

*/

uva12657 移動盒子

你有一行盒子,從左到右依次編號為1,2,3,n。可以執行以下4種指令 1 x y 表示把盒子x移動到盒子y的左邊 如果x已經在y的左邊則忽略此指令 2 x y 表示把盒子x移動到盒子y的右邊 如果x已經在y的右邊則忽略此指令 3 x y 表示交換盒子x和y的位置。4 表示反轉整條鏈。指令保證合法,即...

6 5 移動的盒子 uva12657

較為複雜的一題 有點類似6 1 但是分析完之後比6 1簡單 就是按照思路模擬就好!學會了雙向鍊錶 先初始化 link是關鍵 分析命令 可以大大簡化 反轉鍊錶不用反轉 改操作和輸出就行 includeusing namespace std void link int int int left1 100...

Uva 12657 (雙向鍊錶

最後要求輸出奇數字數的和,記錄操作4的次數和n的奇偶即可表示出答案 用雙向鍊錶來表示關係 include include includetypedef long long ll int righta 100005 lefta 100005 void link int l,int r l r usin...