博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSP - 2017 -09 - 2 公共钥匙盒
阅读量:4217 次
发布时间:2019-05-26

本文共 3477 字,大约阅读时间需要 11 分钟。

C++版(1) #include
#include
#include
#define RETURN 0#define GET 1#define MAX 1005using namespace std;struct Node{ int w; int t; int type; bool operator < (Node a) const{ if(t == a.t){ if(type == a.type) return w < a.w; else return type < a.type; } return t < a.t; }}; vector
arr;int a[MAX];int main() { Node node; int n, k; int w,s,c; scanf("%d%d",&n,&k); for(int i = 0; i < k; ++i){ scanf("%d%d%d",&w,&s,&c); node.w = w; node.t = s; node.type = GET; arr.push_back(node); node.t = s+c; node.type = RETURN; arr.push_back(node); } sort(arr.begin(),arr.end()); for(int i = 1; i <= n; ++i){ a[i] = i; } for(int i = 0; i < arr.size(); ++i){ Node tmp = arr[i]; if(tmp.type == RETURN){ for(int j = 1; j <= n; ++j){ if(a[j] == 0){ a[j] = tmp.w; break; } } } else if(tmp.type == GET){ for(int j = 1; j <= n; ++j){ if(a[j] == tmp.w){ a[j] = 0; break; } } } } for(int i = 1; i <= n; ++i){ cout << a[i] <<" "; } // for(int i = 0; i < arr.size(); ++i){// cout << arr[i].t <<" ";// } return 0; } C++版(2) 开始没有满分 是因为数组开小了, 题目测试点在 10000+ 所以 尽可能的开大一点 防止极限测试点不过 #include
#include
using namespace std;const int INF = 65535;const int MAX = 20000;int main() { int i, j; int a[MAX]; int b[MAX][3]; int c[MAX]; int N, K, x; cin >> N >> K; for(i = 0; i < K; i++ ){ for(j = 0; j < 3; j++ ){ cin >> x; b[i][j] = x; } } for(i = 1; i <= N; i++ ){ a[i] = i; } int time, cnt; for(time = 1; time <= MAX; time++ ){ cnt = 0; for(i = 0; i < N; i++ ){//每次time都要重新初始化 c[i] = INF; } for(i = 0; i < K; i++ ){ if(b[i][1] + b[i][2] == time){ c[cnt++] = b[i][0]; } } sort(c, c+N); for(i = 0; i < cnt; i++ ){ for(j = 1; j <= N; j++ ){ if(a[j] == 0){ a[j] = c[i]; break; } } } for(i = 0; i < K; i++ ){ if(time == b[i][1]){ for(int k = 1; k <= N; k++ ){//这里 钥匙可能更换位置 需要找到其当前所在位置 然后取走(置0) if(a[k] == b[i][0]){ a[k] = 0; break; } } } } } for(int i = 1; i <= N; i++ ){ cout << a[i] << " "; } return 0; } //Java的另一种实现: 所有时刻按照题目规则排序import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;public class Main { ArrayList
list; Scanner in = new Scanner(System.in); int []a; public static void main(String[] args) { new Main().run(); } public void run(){ list = new ArrayList<>(); int n, k; n = in.nextInt(); k = in.nextInt(); a = new int[n+1]; for(int i = 1; i <= n; i++ ){ a[i] = i; } int key,time, lastTime; for(int i = 0; i < k; i++ ){ key = in.nextInt(); time = in.nextInt(); lastTime = in.nextInt(); list.add(new Node(key, time, 1)); list.add(new Node(key, time+lastTime, 0)); } Collections.sort(list); for(int i = 0; i < list.size(); i++ ){ if(list.get(i).id == 0){ for(int j = 1; j <= n; j++ ){ if(a[j] == 0){ a[j] = list.get(i).key; break; } } } else{ for(int m = 1; m <= n; m++ ){ if(a[m] == list.get(i).key){ a[m] = 0; break; } } } } for(int i = 1; i <= n; i++ ){ System.out.print(a[i] + " "); }// for(Node node : list){// System.out.print(node.time+" " + node.key+" ");// } } }class Node implements Comparable
{ int key, time; int id; public Node(int key, int time, int id){ this.key = key; this.time = time; this.id = id; } @Override public int compareTo(Node o){ if(this.time > o.time ) return 1; else if(this.time == o.time){ if(this.id > o.id) return 1; else if(this.id == o.id){ if(this.key > o.key) return 1; else if(this.key == o.key) return 0; else return -1; } else return -1; } else return -1; } } 

转载地址:http://moimi.baihongyu.com/

你可能感兴趣的文章
cocos2dx左下角三行数值意义
查看>>
LUA modue require package 区别
查看>>
package.loaded
查看>>
cocoStudio: Button设置锚点问题
查看>>
vld 使用
查看>>
MAC下安装多版本JDK和切换几种方式
查看>>
java.util.concurrent详解
查看>>
java事务大总结(一) 先理解数据库的事务以mysql为例
查看>>
java事务大总结(二) 理解JDBC事务的工作机制
查看>>
java事务大总结(三) 理解学习 JTA(Java Transaction API)
查看>>
java事务大总结(四)spring事务相关大总结
查看>>
驴妈妈管理的一点经验总结
查看>>
IOS开发学习的好资料大搜藏
查看>>
SSH的认证终结(无需密码的git操作或者ssh链接无需密码)
查看>>
Jetty 的工作原理以及与 Tomcat 的比较
查看>>
ssh-keygen的使用方法 注意权限问题
查看>>
zookeeper的server的集群配置实例[张振华-Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第一篇:互联网时代U盘化生存方式 【张振华.Jack】
查看>>
CentOS6.4配置Hadoop-2.6.0集群配置安装指南(经过实战演练)【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第二篇:专注的力量 [张振华.Jack]
查看>>