11-雜湊4 Hashing - Hard Version
輸入樣例:
11
33 1 13 12 34 38 27 22 32 -1 21
輸出樣例:
1 13 12 21 33 34 38 27 22 32
題意:根據hash得到的結果,得出輸入序列
/*每個值本來應該在hash得到的下標,但因為存在衝突,所以有的會有hash值有距離
這個距離可能是hash一樣的佔了,也可能是hash不一樣的但在前面輸入的佔了導致後移
*/
#include<stdio.h>
struct node{
int in; //入度,記錄與本來應該的位置差多遠,相關地方走一個之後-1,為0即可輸出
int root; //根 記錄本來應該在的位置.如果輸出的在判斷的根和判斷的值中間,則判斷的入度--
int val;
}num[1001]; //下標作為hash的值
/*
這個函式不是得到真的輸入 而是從雜湊後的結果輸入
本來每個的值hash後應該等於下標,但是可能有衝突,故記錄其根位置和入度
*/
int GetInput(int N)
{
int i,x,empty=0;
for(i=0;i<N;i++)
{
scanf("%d",&x);
//負數表示空
if(x<0)
{
num[i].in=-1;
num[i].root=-1;
empty++; //記錄空值
}
else{
if(x%N==i)
{
num[i].in=0;
num[i].val=x;
num[i].root=x%N;
}
else{
num[i].val=x;
int temp=i-x%N;
if(temp<0)
temp+=N; //輪到第二圈了
num[i].in=temp; //與root的差距
num[i].root=x%N;
}
}
}
return empty;
}
void Output(int N,int empty)
{
int i,j,x,y,mini;
for(j=0;j<N-empty-1;j++)
{
int min=65536;
//每次找入度為0的最小的,題目要求
for(i=0;i<N;i++)
{
if(num[i].in==0&&num[i].val<min)
{
mini=i;
min=num[i].val;
}
}
printf("%d ",num[mini].val); //找最小的
num[mini].in=-1;
for(i=0;i<N;i++)
{
if(num[i].in>0)
if((i<num[i].root&&(mini<i||mini>=num[i].root))||(i>num[i].root&&mini<i&&mini>=num[i].root)) //輸出的在根和所在位置中間,表明其原來佔了位
num[i].in--;
}
}
//最後剩的一個
for(i=0;i<N;i++)
{
if(num[i].in==0)
printf("%d",num[i].val);
}
}
int main()
{
int N,i,x,empty;
scanf("%d",&N);
empty=GetInput(N);
Output(N,empty);
return 0;
}
相關文章
- Hashing雜湊注意事項
- CF 2010 C2. Message Transmission Error (hard version) (*1700) 字串+雜湊Error字串
- Reverse Card (Hard Version)
- C2. Potions (Hard Version)
- C2. Magnitude (Hard Version)
- C2. Adjust The Presentation (Hard Version)
- D2. Reverse Card (Hard Version)
- D2. Set To Max (Hard Version)
- Hash,雜湊,雜湊?
- 七夕也要學起來,雜湊雜湊雜湊!
- C2. Errich-Tac-Toe (Hard Version)
- CF 1968 G1.Division + LCP (easy version) (*1900) 二分+雜湊
- 雜湊
- 【尋跡#3】 雜湊與雜湊表
- js 雜湊雜湊值的模組JS
- 雜湊表(雜湊表)原理詳解
- CF1998E2 Eliminating Balls With Merging (Hard Version)
- 雜湊表
- 雜湊碰撞
- 字串雜湊字串
- 樹雜湊
- 2024.3.26 雜湊
- 雜湊索引索引
- 題解:CF1537E2 Erase and Extend (Hard Version)
- [題解]CF1990E2 Catch the Mole(Hard Version)
- CF1967B2 Reverse Card (Hard Version) 題解
- CF1264D1/2 Beautiful Bracket Sequence (easy/hard version)Racket
- CF1264D2 Beautiful Bracket Sequence (hard version) 題解Racket
- 安全的雜湊
- 異或雜湊
- 雜湊衝突
- 6.7雜湊表
- 關於雜湊
- 字串雜湊表字串
- 雜湊函式函式
- 雜湊表2
- redis之雜湊Redis
- 雜湊遊戲之雜湊盒子的趨勢未來可期遊戲