#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
struct data {
struct data *next ;
int num ;
int score ;
};
int M( int num ) {
num = num * 2 / 3 ;
if(num %3 != 0 ) num++ ;
int i = 0 ;
bool yes = true ;
// 檢查 num 是否為質數 //
for (i = 2 ; i < num ; i++ )
if ( num%i == 0 ) yes = false ;
if( yes ) return num ;
// END //
// 找出比NUM大的質數 //
num++;
yes = true ;
for( num ; num ; num ++) {
for ( i = 2 ; i< num ; i++) {
if(num %i == 0 ) yes = false ;
} // for
if ( yes ) return num ;
} // for
} // int M()
int H( int num ,int m ) {
num = ( ( 97 * num ) + 11 ) % m ;
return num ;
}
int main()
{
FILE *fI ;
FILE *fO ;
char ip[200] ; // input檔名 //
char op[200]= "" ; // output //
cout << "請輸入檔案名稱:" ;
cin >> ip ;
int num ; // 學生總數 //
char temp ;
strcat( op, ip ) ;
strcat( op, "_output.txt" ) ;
strcat( ip, ".txt" ) ;
fI = fopen( ip, "r") ;
fO = fopen( op, "w" ) ;
fscanf(fI, "%d%c", &num ,&temp ) ;
data dataA[M( num )] ;
data dataB[M( num )] ;
data dtemp ;
int number ; // 學號 //
int sc ; // 分數 //
int index ;
fscanf( fI, "%d%c%d%c", &number,&temp,&sc,&temp ) ;
index = H (number, M( num ) ) ;
dataA[index].num = number ;
dataA[index].score = sc;
dataA[index].next = NULL ;
dataB[index].num = number ;
dataB[index].score = sc;
dataB[index].next = NULL ;
while( temp != '\n' ) {
fscanf( fI, "%d%c%d%c", &number,&temp,&sc,&temp ) ;
index = H (number, M( num ) ) ;
/*******AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA****/
if( dataA[index].num == 0 ) {
dataA[index].num = number ;
dataA[index].score = sc;
dataA[index].next = NULL ;
}
else {
dataA[index].next=dataA[index] ;
dataA[index].num = number ;
dataA[index].score = sc;
}
/*******AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA****/
/*******BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB****/
/*******BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB****/
}
fclose(fI) ;
fclose(fO) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGRhdGEgewogIHN0cnVjdCBkYXRhICpuZXh0IDsKICBpbnQgbnVtICA7CiAgaW50IHNjb3JlIDsKfTsKCgoKaW50IE0oIGludCBudW0gKSB7CiAgICBudW0gPSBudW0gKiAyIC8gMyA7CiAgICBpZihudW0gJTMgIT0gMCApIG51bSsrIDsKICAgIGludCBpID0gMCA7CiAgICBib29sIHllcyA9IHRydWUgOwogICAgLy8g5qqi5p+lIG51bSDmmK/lkKbngrros6rmlbggLy8KICAgIGZvciAoaSA9IDIgOyBpIDwgbnVtIDsgaSsrICkKICAgICAgaWYgKCBudW0laSA9PSAwICkgeWVzID0gZmFsc2UgOwoKICAgIGlmKCB5ZXMgKSByZXR1cm4gbnVtIDsKICAgIC8vICBFTkQgLy8KICAgIC8vIOaJvuWHuuavlE5VTeWkp+eahOizquaVuCAvLwogICAgbnVtKys7CiAgICB5ZXMgPSB0cnVlIDsKICAgIGZvciggbnVtIDsgbnVtIDsgbnVtICsrKSB7CiAgICAgIGZvciAoIGkgPSAyIDsgaTwgbnVtIDsgaSsrKSB7CiAgICAgICAgaWYobnVtICVpID09IDAgKSB5ZXMgPSBmYWxzZSA7CiAgICAgIH0gLy8gZm9yCiAgICAgIGlmICggeWVzICkgcmV0dXJuIG51bSA7CiAgICB9ICAvLyBmb3IKfSAgLy8gaW50IE0oKQoKaW50IEgoIGludCBudW0gLGludCBtICkgewogIG51bSA9ICggKCA5NyAqIG51bSApICsgMTEgKSAlIG0gOwogIHJldHVybiBudW0gOwp9CgoKaW50IG1haW4oKQp7CiAgICBGSUxFICpmSSA7CiAgICBGSUxFICpmTyA7CiAgICBjaGFyIGlwWzIwMF0gOyAvLyBpbnB1dOaqlOWQjSAvLwogICAgY2hhciBvcFsyMDBdPSAiIiA7IC8vIG91dHB1dCAvLwogICAgY291dCA8PCAi6KuL6Ly45YWl5qqU5qGI5ZCN56ix77yaIiA7CiAgICBjaW4gPj4gaXAgOwogICAgaW50IG51bSA7ICAvLyDlrbjnlJ/nuL3mlbggLy8KICAgIGNoYXIgdGVtcCA7CiAgICBzdHJjYXQoIG9wLCBpcCApIDsKICAgIHN0cmNhdCggb3AsICJfb3V0cHV0LnR4dCIgKSA7CiAgICBzdHJjYXQoIGlwLCAiLnR4dCIgKSA7CiAgICBmSSA9IGZvcGVuKCBpcCwgInIiKSA7CiAgICBmTyA9IGZvcGVuKCBvcCwgInciICkgOwogICAgZnNjYW5mKGZJLCAiJWQlYyIsICZudW0gLCZ0ZW1wICkgOwogICAgZGF0YSBkYXRhQVtNKCBudW0gKV0gIDsKICAgIGRhdGEgZGF0YUJbTSggbnVtICldICA7CiAgICBkYXRhIGR0ZW1wIDsKICAgIGludCBudW1iZXIgOyAvLyDlrbjomZ8gLy8KICAgIGludCBzYyA7IC8vIOWIhuaVuCAvLwogICAgaW50IGluZGV4IDsKCiAgICBmc2NhbmYoIGZJLCAiJWQlYyVkJWMiLCAmbnVtYmVyLCZ0ZW1wLCZzYywmdGVtcCApIDsKICAgIGluZGV4ID0gSCAobnVtYmVyLCBNKCBudW0gKSApIDsKCgogICAgZGF0YUFbaW5kZXhdLm51bSA9IG51bWJlciA7CiAgICBkYXRhQVtpbmRleF0uc2NvcmUgPSBzYzsKICAgIGRhdGFBW2luZGV4XS5uZXh0ID0gTlVMTCA7CgogICAgZGF0YUJbaW5kZXhdLm51bSA9IG51bWJlciA7CiAgICBkYXRhQltpbmRleF0uc2NvcmUgPSBzYzsKICAgIGRhdGFCW2luZGV4XS5uZXh0ID0gTlVMTCA7CgoKICAgIHdoaWxlKCB0ZW1wICE9ICdcbicgKSB7CgoKICAgICAgZnNjYW5mKCBmSSwgIiVkJWMlZCVjIiwgJm51bWJlciwmdGVtcCwmc2MsJnRlbXAgKSA7CiAgICAgIGluZGV4ID0gSCAobnVtYmVyLCBNKCBudW0gKSApIDsKICAgICAgLyoqKioqKipBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSoqKiovCiAgICAgIGlmKCBkYXRhQVtpbmRleF0ubnVtID09IDAgKSB7CiAgICAgICAgZGF0YUFbaW5kZXhdLm51bSA9IG51bWJlciA7CiAgICAgICAgZGF0YUFbaW5kZXhdLnNjb3JlID0gc2M7CiAgICAgICAgZGF0YUFbaW5kZXhdLm5leHQgPSBOVUxMIDsKICAgICAgfQoKICAgICAgZWxzZSB7CiAgICAgICAgZGF0YUFbaW5kZXhdLm5leHQ9ZGF0YUFbaW5kZXhdIDsKICAgICAgICBkYXRhQVtpbmRleF0ubnVtID0gbnVtYmVyIDsKICAgICAgICBkYXRhQVtpbmRleF0uc2NvcmUgPSBzYzsKICAgICAgfQogICAgICAvKioqKioqKkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBKioqKi8KCiAgICAgIC8qKioqKioqQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIqKioqLwoKICAgICAgLyoqKioqKipCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQioqKiovCiAgICB9CgoKCiAgICBmY2xvc2UoZkkpIDsKICAgIGZjbG9zZShmTykgOwp9Cg==