data structure 胱搞透房

来源:互联网 发布:2016新疆网络管制 编辑:程序博客网 时间:2024/06/04 17:44


import java.util.*;
import java.util.Map.Entry;

import com.sun.corba.se.spi.orbutil.fsm.Action;

//input file 1
//  site ID, ad_min_price   ad url
//input file 2
//ad_ID  budgetforeachsite need_site_quantity  site_id1 site id 2 site id 3
public class ads {
 Map<Integer, Site> siteMap = new Hashtable<Integer, Site>();
 Map<Integer, Ad> adMap = new Hashtable<Integer, Ad>();
 Map<Integer, List<Ad>> auctionMap = new Hashtable<Integer, List<Ad>>();

 public void fulfillData() {
  // 输入siteMap的数据
  // while(siteStream.hasNext()){
  // Site site= siteStrem.next();
  // siteMap.put(site.getSiteid(),site);
  // }

  // 输入adMap的数据
  // while(AdStream.hasNext()){
  // Ad ad= adStream.next();
  // siteMap.put(site.getSiteid(),site);
  // }

  // 遍历adMap 把所有竞标需求都和site匹配上
  Iterator<Integer> iter = adMap.keySet().iterator();

  while (iter.hasNext()) { // 一次while循环处理一个ad
   Integer ad_Id = iter.next();
   Ad ad = adMap.get(ad_Id);
   List<Integer> siteList = ad.getBiddingList();
   for (Integer siteId : siteList) {
    if (auctionMap.containsKey(siteId)) {
     List<Ad> biddingAds = auctionMap.get(siteId);
     biddingAds.add(ad);
     auctionMap.put(siteId, biddingAds);
    } else {
     List<Ad> biddingList = new ArrayList<Ad>();
     biddingList.add(ad);
     auctionMap.put(siteId, biddingList);
    }
   }
  }
 }

 public int Winner(String siteId) {
  List<Ad> ads = auctionMap.get(siteId);
  Collections.sort(ads, new SortByAuctionRule());
  Site site = siteMap.get(siteId);
  int bidder = ads.size();
  if (bidder == 1) {
   if (ads.get(0).getBudget() >= site.getAd_min_cost()) {
    // 此时的真实成交价是 site的 min cost
    return ads.get(0).getAdID();
   } else {
    return -1;
   }
  } else if (bidder < 1) {
   // 没有符合条件的bidder
   return -1;
  } else {
   if (ads.get(1).getBudget() >= site.getAd_min_cost()) {
    // 此时的真实成交价是 ads.get(1)的budget
    return ads.get(0).getAdID();
   } else {
    if (ads.get(0).getBudget() >= site.getAd_min_cost()) {
     // 此时的真实成交价是 site的 min cost
     return ads.get(0).getAdID();
    } else { // 最高价格也达不到min cost 流拍
     return -1;
    }
   }

  }
 }

 private static final class SortByAuctionRule implements Comparator<Ad> {

  public int compare(Ad o1, Ad o2) {
   int compare = o2.getBudget() - o1.getBudget();
   if (compare != 0) {
    return compare;
   } else {
    return o1.getAdID() - o2.getAdID();
   }

  }
 }
}

class Site {
 private int siteID;
 private int ad_min_cost;
 private String URL;

 public int getSiteID() {
  return siteID;
 }

 public void setSiteID(int siteID) {
  this.siteID = siteID;
 }

 public int getAd_min_cost() {
  return ad_min_cost;
 }

 public void setAd_min_cost(int ad_min_cost) {
  this.ad_min_cost = ad_min_cost;
 }

 public String getURL() {
  return URL;
 }

 public void setURL(String uRL) {
  URL = uRL;
 }
}

class Ad {
 private int adID;
 private int budget;
 private int site_Quantity;
 private List<Integer> biddingList;

 public int getAdID() {
  return adID;
 }

 public void setAdID(int adID) {
  this.adID = adID;
 }

 public int getBudget() {
  return budget;
 }

 public void setBudget(int budget) {
  this.budget = budget;
 }

 public int getSite_Quantity() {
  return site_Quantity;
 }

 public void setSite_Quantity(int site_Quantity) {
  this.site_Quantity = site_Quantity;
 }

 public List<Integer> getBiddingList() {
  return biddingList;
 }

 public void setBiddingList(List<Integer> biddingList) {
  this.biddingList = biddingList;
 }

}

0 0
原创粉丝点击