Untitled
unknown
plain_text
a year ago
3.7 kB
6
Indexable
#ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #include <stdio.h> void init(int N, int L, int mAbility[]); int move(); int trade(); #define MAX_N 39990 #define CMD_INIT 100 #define CMD_MOVE 200 #define CMD_TRADE 300 static bool run() { int query_num; scanf("%d", &query_num); int ans; bool ok = false; for (int q = 0; q < query_num; q++) { int query; scanf("%d", &query); if (query == CMD_INIT) { int N; int L; int mAbility[MAX_N]; scanf("%d %d", &N, &L); for (int i = 0; i < N; i++){ scanf("%d", &mAbility[i]); } init(N, L, mAbility); ok = true; } else if (query == CMD_MOVE) { int ret = move(); scanf("%d", &ans); if (ans != ret) { ok = false; } } else if (query == CMD_TRADE) { int ret = trade(); scanf("%d", &ans); if (ans != ret) { ok = false; } } } return ok; } int main() { setbuf(stdout, NULL); freopen("sample_input.txt", "r", stdin); int T, MARK; scanf("%d %d", &T, &MARK); for (int tc = 1; tc <= T; tc++) { int score = run() ? MARK : 0; printf("#%d %d\n", tc, score); } return 0; } ------------------------------------------ #include <iostream> #include <vector> #include <algorithm> using namespace std; int N,L,Width; struct Node{ int ID; int Ability; Node(){}; Node(int mID,int mAbi){ ID = mID; Ability = mAbi; } }; bool cmp(Node a,Node b){ if(a.Ability == b.Ability) return a.ID < b.ID; return a.Ability > b.Ability; } vector<Node> League[10]; int findIndex(int mLeague,Node v){ int low = 0,high = League[mLeague].size()-1,mid; while(low != high){ mid = (low + high)/2; if(cmp(League[mLeague][mid],v)){ low =mid+1; }else high=mid; } return low; } void ADD(int mLeague,Node v){ int Pos = findIndex(mLeague,v); if(cmp(League[mLeague][Pos],v)) League[mLeague].insert(League[mLeague].begin()+Pos+1,v); else League[mLeague].insert(League[mLeague].begin()+Pos,v); } void init(int N, int L, int mAbility[]) { ::N = N; ::L = L; Width = N/L; for(int i=0;i<L;i++) League[i].clear(); for(int i=0;i<N;i++) League[i/Width].push_back(Node(i,mAbility[i])); for(int i=0;i<L;i++) sort(League[i].begin(),League[i].end(),cmp); } int move() { int Ret = 0; Node Up,Down,Temp; Down = League[0].back(); League[0].pop_back(); for(int i=1;i<L;i++){ Up = League[i].front(); Temp = League[i].back(); if(i!= L-1) League[i].pop_back(); Ret += (Up.ID + Down.ID); League[i].erase(League[i].begin()); ADD(i-1,Up); ADD(i,Down); Down = Temp; } return Ret; } int trade() { int Ret = 0; Node Up,Down,Temp; Down = League[0][Width/2]; League[0].erase(League[0].begin()+Width/2); for(int i=1;i<L;i++){ Up = League[i].front(); Temp = League[i][Width/2]; if(i!= L-1) League[i].erase(League[i].begin()+Width/2); Ret += (Up.ID + Down.ID); League[i].erase(League[i].begin()); ADD(i-1,Up); ADD(i,Down); Down = Temp; } return Ret; } ----------------------
Editor is loading...