gym101611F Fake or Leak?

本文介绍了一种算法,用于验证编程比赛封榜后榜单的合法性。通过覆盖封榜后的信息并排序,对比选手成绩,确保榜单的真实性和公平性。

https://codeforces.com/gym/101611/problem/F

题目保证了从封榜到最后的榜是合法的,那么就少了很多判断了。

只需要把封榜后的k个信息直接覆盖到原来的榜,然后排序,夹在这k个中间的,最后不可能更坏,就让他们所有剩下的题都在240分钟一发过,这样的最好情况比这k个的最好的那个还要好,就没问题,否则就一定是是fake的

#include<bits/stdc++.h>
#define maxl 1010
using namespace std;

int n,m,k,ans;
struct node
{
  string nam;
  char c[27][2];
  int a[27],t[27];
  int cnt,pent,lastt;
}a[maxl],b[maxl];

inline void prework()
{
  scanf("%d%d%d",&n,&m,&k);
  for(int i=1;i<=m;i++)
    {
      cin>>a[i].nam;
      a[i].cnt=0;a[i].pent=0;
      for(int j=1;j<=n;j++)
	{
	  scanf("%s",a[i].c[j]);
	  scanf("%d%d",&a[i].a[j],&a[i].t[j]);
	  if(a[i].c[j][0]=='+')
	    {
	      a[i].cnt++,a[i].pent+=a[i].t[j]+20*(a[i].a[j]-1);
	      a[i].lastt=max(a[i].lastt,a[i].t[j]);
	    }	 
	}
    }
  for(int i=1;i<=k;i++)
    {
      cin>>b[i].nam;
      b[i].cnt=0;b[i].pent=0;
      for(int j=1;j<=n;j++)
	{
	  scanf("%s",b[i].c[j]);
	  scanf("%d%d",&b[i].a[j],&b[i].t[j]);
	  if(b[i].c[j][0]=='+')
	    { 
	      b[i].cnt++,b[i].pent+=b[i].t[j]+20*(b[i].a[j]-1);
	      b[i].lastt=max(b[i].lastt,b[i].t[j]);
	    }
	}
      for(int ii=1;ii<=m;ii++)
	if(b[i].nam==a[ii].nam)
	  {
	    a[ii].cnt=b[i].cnt;
	    a[ii].pent=b[i].pent;
	    a[ii].lastt=b[i].lastt;
	    break;
	  }
    }
}

inline bool cmp(const node &a,const node &b)
{
  if(a.cnt==b.cnt)
    {
      if(a.pent==b.pent)
	{
	  if(a.lastt==b.lastt)
	      return a.nam<b.nam;
	  else
	    return a.lastt<b.lastt;
	}
      else
	return a.pent<b.pent;
    }
  else
    return a.cnt>b.cnt;
}

inline void mainwork()
{
  sort(b+1,b+1+k,cmp);
  sort(a+1,a+1+m,cmp);
  int st,ed;
  for(int i=1;i<=m;i++)
    if(a[i].nam==b[1].nam)
      {
	st=i;
	break;
      }
  for(int i=m;i>=1;i--)
    if(a[i].nam==b[k].nam)
      {
	ed=i;
	break;
      }
  int id=1;ans=1;
  for(int i=st;i<=ed;i++)
    if(a[i].nam==b[id].nam)
      id++;
    else
      {
	a[i].cnt=n;
	for(int j=1;j<=n;j++)
	  if(a[i].c[j][0]=='.' || a[i].c[j][0]=='-')
	  {
	    a[i].pent+=240+a[i].a[j]*20;
	    a[i].lastt=max(a[i].lastt,240);
	  }
	if(!cmp(a[i],b[1]))
	  {
	    ans=0;
	    return;
	  }
      }
}

inline void print()
{
  if(ans)
    puts("Leaked");
  else
    puts("Fake");
}

int main()
{
  //freopen("F2.in","r",stdin);
  prework();
  mainwork();
  print();
  return 0;
}
/*
3 3 2
crabs + 1 1 + 1 2 + 1 3
lions . 0 0 - 5 239 . 0 0
wombats . 0 0 . 0 0 . 0 0
wombats + 1 241 + 3 299 - 22 299
lions + 1 241 + 6 240 - 3 299

3 4 2
crabs + 1 1 + 1 2 + 1 3
lions . 0 0 + 5 239 . 0 0
wolves . 0 0 . 0 0 . 0 0
wombats . 0 0 . 0 0 . 0 0
crabs + 1 1 + 1 2 + 1 3
wombats . 0 0 + 2 299 . 0 0
 */

 

<think>嗯,用户这次的问题很明确,直接询问Isaac Gym能否导出ONNX文件。从上下文看,用户应该是个开发者或研究者,正在使用Isaac Gym进行机器人或AI相关的开发,需要将训练好的模型部署到其他平台。 用户之前提到“参考站内引用”,但当前对话中并没有相关引用内容。可能用户误操作了,或者引用了其他对话内容。不过核心问题很清晰,不需要额外引用也能回答。 关于Isaac Gym和ONNX导出的问题,需要分几个层面考虑:首先是Isaac Gym本身的功能定位,它主要是个物理仿真环境;其次是它集成的训练框架(如RL Policy);最后才是模型导出能力。根据之前的知识库,Isaac Gym不直接支持ONNX导出,但可以通过其训练的PyTorch模型间接实现。 用户可能遇到的实际场景是:在Isaac Gym里训练好强化学习策略后,想部署到嵌入式系统或移动设备上运行。ONNX作为通用模型格式确实是常见选择。不过需要提醒用户注意动态控制策略的兼容性问题,这是机器人领域特有的挑战。 回答时要明确三点:1)Isaac Gym没有内置导出功能;2)变通方案的可行性;3)关键注意事项。特别是动态控制策略的时序依赖问题,普通开发者容易忽略这点。 最后生成的问题要覆盖用户可能的后续需求:部署细节、替代方案、兼容性优化等。特别是最后关于实时控制的问题,这是机器人应用的核心痛点。 </think>Isaac Gym 本身 **不直接支持导出 ONNX 文件**,因为它是一个专注于物理仿真和强化学习训练的环境,而非模型导出工具。但可以通过以下思路实现导出: --- ### **导出ONNX的可行方案** 1. **分离模型与环境** 在 Isaac Gym 中训练的模型(如 PyTorch 实现的 RL Policy),本质上是独立的神经网络。你需要: - 将模型代码从 Isaac Gym 训练脚本中剥离 - 确保模型输入/输出层与仿真环境解耦 2. **使用 PyTorch 原生导出** 若模型基于 PyTorch 构建(Isaac Gym 默认支持 PyTorch),可直接使用 `torch.onnx.export`: ```python import torch torch.onnx.export(model, dummy_input, "policy.onnx", input_names=["obs"], output_names=["action"]) ``` *注:需构造与 Isaac Gym 观测空间匹配的 `dummy_input`* 3. **验证ONNX兼容性** - 使用 ONNX Runtime 加载并推理: ```python import onnxruntime as ort sess = ort.InferenceSession("policy.onnx") outputs = sess.run(["action"], {"obs": processed_obs}) ``` - 对比 Isaac Gym 原始输出,确保精度一致 --- ### **关键注意事项** 1. **动态控制策略的挑战** Isaac Gym 中许多策略依赖时序状态(如 LSTM),导出静态 ONNX 时需固定序列长度或使用动态轴(实验性功能)。 2. **自定义算子的兼容性** 若模型使用特殊 CUDA 算子(如 Isaac Gym 的 GPU 加速层),需确保 ONNX 运行时支持或替换为等效算子。 3. **预处理/后处理同步** ONNX 模型需包含与 Isaac Gym 一致的观测归一化、动作缩放等逻辑,否则部署会失效。 --- ### **替代方案建议** ✅ **中间格式转换** 先导出 TorchScript (`model.pt`),再用 [ONNX Script](https://github.com/microsoft/onnxscript) 转换,适应性更强。 ✅ **部署专用框架** 考虑 NVIDIA 的 [Triton Inference Server](https://github.com/triton-inference-server/server),直接部署 PyTorch 模型,避免格式转换。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值