关注
import java.util.*; public class Main { public static goods[] goodsList;
public static ArrayList <activity> activityId;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) { /*//注意while处理多个case*/
int n = in.nextInt(); /*// goods*/
int m = in.nextInt(); /*// requests*/
int gid;
int popular;
int limitQuantity;
goodsList = new goods[n];
activityId = new ArrayList<>();
for (int i = 0; i < n; i++) {
gid = in.nextInt();
popular = in.nextInt();
limitQuantity = in.nextInt();
goods g = new goods(gid, popular, limitQuantity);
goodsList[i] = g;
}
System.out.println();
for (int i = 0; i < m; i++) {
int currentStamp = in.nextInt();
String requestType = in.next(); // 最后一个list读不出来,只能使用"list "在其后加一个空格才能读
switch (requestType){
case "add": {
int res;
int st = in.nextInt();
int et = in.nextInt();
int gi = in.nextInt();
int limit = in.nextInt();
if (st > currentStamp && st < et) {
res = addActivity(st, et, gi, limit);
}
else res = -1;
System.out.println(res);
break;
}
case "buy": {
int res;
int activid = in.nextInt();
int quantity = in.nextInt();
res = buyGoods(currentStamp, activid, quantity);
System.out.println(res);
break;
}
case "list": {
ArrayList<activity> activiId = getActivityList(currentStamp);
if (activiId.isEmpty() || activiId == null) {System.out.println();}
else {
for (activity a: activiId
) {
System.out.print(a.id+ " ");
}
System.out.println();
}
break;
}
}
}
}
in.close();
}
public static int addActivity(int st, int et,int gid, int Quantity){
if (!activityId.isEmpty()){
for (activity a: activityId
) {
if (a.go.gid == gid){ /*// 每个goodsId至多添加一次秒杀活动*/
return -1;
}
}
goods gForAct = null;
for (int i = 0; i < goodsList.length; i++) {
if (gid == goodsList[i].gid){ /*// goodsId 一定为存在的商品id。*/
if (goodsList[i].limitQuantity >= Quantity){
goods g = goodsList[i];
g.limitQuantity -= Quantity; /*// 修改商品参加活动后剩余库存*/
gForAct = new goods(gid, g.popular, Quantity);
activity act = new activity(st, et, Quantity, gForAct);
activityId.add(act);
return act.id;
}else { /*// 秒杀商品数量大于商品库存,添加失败,返回-1*/
return -1;
}
}
}
}else {
goods gForAct = null;
for (int i = 0; i < goodsList.length; i++) {
if (gid == goodsList[i].gid){ /*// goodsId 一定为存在的商品id。*/
if (goodsList[i].limitQuantity >= Quantity){
goods g = goodsList[i];
g.limitQuantity -= Quantity; /*// 修改商品参加活动后剩余库存*/
gForAct = new goods(gid, g.popular, Quantity);
activity act = new activity(st, et, Quantity, gForAct);
activityId.add(act);
return act.id;
}else {
return -1;
}
}
}
}
return -1;
}
public static int buyGoods(int cuTime, int activid, int quantity){
if (activityId.isEmpty()){
return -1;
}else {
for (activity a: activityId
) {
if (a.id == activid){ /*// activityId 一定是请求时存在的活动id*/
if (a.eti > cuTime && a.sti <= cuTime){
if (quantity <= a.go.limitQuantity){ /*// 购买成功,减少库存,返回0*/
a.go.limitQuantity -= quantity;
a.lastSoldStamp = cuTime; /*// 更新最近一次卖出时间*/
return 0;
}else return -1; /*// 购买数量大于秒杀商品剩余数量,购买失败,返回-1*/
}else return -1; /*// 秒杀未开始或已结束,购买失败,返回-1*/
}
}
}
return -1;
}
public static ArrayList getActivityList(int cuTime){
if (activityId.isEmpty()) return null;
ArrayList<activity> unSoldOut = new ArrayList<>();
ArrayList<activity> soldOut = new ArrayList<>();
ArrayList<activity> unStart = new ArrayList<>();
for (activity a:activityId
) {
if (a.eti > cuTime){
if (a.sti <= cuTime){
if (a.go.limitQuantity > 0){
unSoldOut.add(a); /*//进行中(未售罄)*/
}else soldOut.add(a); /*// 进行中(已售罄)*/
}else unStart.add(a); /*// 未开始*/
}/*// 对于已结束的秒杀,不返回*/
}
unSoldOut.sort( comparator1); /*// 多级排序*/
soldOut.sort( comparator2);
unStart.sort(comparator3);
activityId.clear();
activityId.addAll(unSoldOut);
activityId.addAll(soldOut);
activityId.addAll(unStart);
return activityId;
}
private final static Comparator comparator1 = new Comparator(){
@Override
public int compare(Object o1, Object o2) {
int cr = 0;
if (o1 instanceof activity && o2 instanceof activity) {
activity a1 = (activity) o1;
activity a2 = (activity) o2;
int a = a2.go.popular - a1.go.popular; /*// 依次按商品人气值从高到低、商品ID从小到大排序*/
if (a != 0)
cr = (a > 0) ? 3 : -1;
else {
a = a2.go.gid - a1.go.gid;
if (a != 0)
cr = (a > 0) ? -2 : 2;
else cr = 0;
}
}
return cr;
}
};
private final static Comparator comparator2 = new Comparator(){
@Override
public int compare(Object o1, Object o2) {
int cr = 0;
if (o1 instanceof activity && o2 instanceof activity) {
activity a2 = (activity) o1;
activity a1 = (activity) o2;
int a = a2.lastSoldStamp - a1.lastSoldStamp; /*// 按最后卖出时间从晚(lastSoldStamp 大)到早(lastSoldStamp 小),商品人气值从高到低、商品ID从小到大排序*/
if (a != 0)
cr = (a > 0) ? 3 : -1;
else {
a = a2.go.popular - a1.go.popular;
if (a != 0)
cr = (a > 0) ? 2 : -2;
else {
a = (a2.go.gid - a1.go.gid);
if (a != 0)
cr = (a > 0) ? 1 : -3;
else {
cr = 0;
}
}
}
}
return cr;
}
};
private final static Comparator comparator3 = new Comparator(){
@Override
public int compare(Object o1, Object o2) {
int cr = 0;
if (o1 instanceof activity && o2 instanceof activity) {
activity a2 = (activity) o1;
activity a1 = (activity) o2;
int a = a2.sti - a1.sti; /*// 依次按开始时间从早(sti 小)到晚(sti 大).商品人气值从高到低、商品ID从小到大排序*/
if (a != 0)
cr = (a > 0) ? 3 : -1;
else {
a = a2.go.popular - a1.go.popular;
if (a != 0)
cr = (a > 0) ? 2 : -2;
else {
a = (a2.go.gid - a1.go.gid);
if (a != 0)
cr = (a > 0) ? 1 : -3;
else {
cr = 0;
}
}
}
}
return cr;
}
};
static class goods{ /*// 商品*/
private int gid;
private int popular;
private int limitQuantity;
public goods(int g, int p, int l){
gid = g;
popular = p;
limitQuantity = l;
}
}
static class activity{ /*// 秒杀活动*/
private goods go;
private static int num = 0;
private final int id = num++;
private int eti;
private int sti;
private int lastSoldStamp;
public activity(int st, int et, int Quantity, goods g){
go = g;
go.limitQuantity = Quantity;
sti = st;
eti = et;
lastSoldStamp = eti-1; /*// 初始化最近一次卖出时间为最晚卖出*/
}
}
}
查看原帖
点赞 评论
相关推荐
果咩纳塞牛:因为我深深地知道如果拿到了这个offer,后续的秋招真的是不同的世界不同的道路,真的很多事情会不一样,可惜的是没有如果。
点赞 评论 收藏
分享
12-06 17:39
中国石油大学(华东) 前端工程师
rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧 点赞 评论 收藏
分享
12-08 18:11
曲阜师范大学 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你小心翼翼的闯过多大的祸? #
2974次浏览 63人参与
# 找不到实习会影响秋招吗 #
1399373次浏览 13633人参与
# 实习没事做是福还是祸? #
3227次浏览 55人参与
# 重来一次,你会对开始求职的自己说 #
796次浏览 19人参与
# 2025年终总结 #
132180次浏览 2255人参与
# 考研人,我有话说 #
156489次浏览 1211人参与
# 哪些公司笔/面试难度大? #
7032次浏览 32人参与
# 实习简历求拷打 #
22943次浏览 245人参与
# 携程工作体验 #
18891次浏览 66人参与
# 大厂VS公务员你怎么选 #
69065次浏览 638人参与
# 扒一扒那些奇葩实习经历 #
140066次浏览 1149人参与
# 找不到好工作选择GAP真的丢人吗 #
93628次浏览 1007人参与
# 那些我实习了才知道的事 #
252940次浏览 1784人参与
# 你觉得现在还能进互联网吗? #
29891次浏览 200人参与
# 非技术投递记录 #
672782次浏览 6820人参与
# 机械求职避坑tips #
81014次浏览 531人参与
# 第一份工作能做外包吗? #
93967次浏览 599人参与
# 投格力的你,拿到offer了吗? #
154665次浏览 829人参与
# 作业帮求职进展汇总 #
85228次浏览 559人参与
# 秋招遇到的奇葩面试题 #
101217次浏览 416人参与