G-Traffic

这道题是在打训练赛写的,当时是剩下还不到半个小时看的,看了一小会就有思路,但是还是没有在比赛时间做出来,过了得10分钟才调试出来,有一些细节没考虑当时。

题目大意:有两排车要通过一个十字路口,东西排有n辆车,南北排有m辆车,每辆车都会在某一的时间通过十字路口,如果有两辆车在同一时间通过十字路口的话,就会发生交通事故,现在东西排车子按计划行驶,南北的话要等东西排一段时间,让交通事故不发生,问至少停下多少秒,注意是全部一起停下。

思路:要让每一辆车子通过十字路口的时间不同,就要让南北方向的车子等待一段时间,让通过时间不同,可以用一个数组来记录时间路口在第几秒有汽车通过,因为东西方向的车子不变,先记录,再去记录南北方向的车子,从头开始记录,如果时间冲突,等待时间就增加一秒,知道最后一辆车子通过也没有发生交通事故,输出等待时间。

下面是当时的代码,还没来得及整理,AC代码

#include<iostream>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<cstring>
#include<set>
#include<vector>
#include<stack>
//#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T = 1;
int n, m;
void slove() {

int a[1005] = { 0 }; int b[1005] = { 0 }, rood[2010] = { 0 };//分别是东西,南北方向的车子通过时间的数组,还有记录某一时刻是否有车子通过的数组
        for (int i = 0; i < n; i++)cin >> a[i];//东西方向通过时间

        for (int j = 0; j < m; j++)cin >> b[j];//南北方向通过时间

        for (int i = 0; i <= 100000; i++) {//等待时间从0,到100000,这是随便取的,反正不可能等这么久吧
            memset(rood, 0, sizeof(rood));//重置数组
            for (int j = 0; j < n; j++) rood[a[j]]++;//东西方向车子先占用可以通过十字路口的时间
            for (int j = 0; j < m; j++) {
                rood[b[j] + i]++;
                if (rood[b[j] + i] >= 2) {//冲突,重新判断,+i就是等待的秒数
                    break;
                }
                if (j==m-1&&rood[b[m - 1] + i] == 1) {//坚持到最后的车子通过
                    cout << i << endl;
                    return;
                }
            }
        }
    }

int main() {

    //scanf("%d", &T);
    while (~scanf("%d%d", &n, &m)) {
        slove();
    }
    return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1 package com.alibaba.traffic.web; 2 3 import java.io.UnsupportedEncodingException; 4 import java.security.InvalidKeyException; 5 import java.security.NoSuchAlgorithmException; 6 7 import javax.crypto.Mac; 8 import javax.crypto.SecretKey; 9 import javax.crypto.spec.SecretKeySpec; 10 11 import org.apache.commons.codec.binary.Hex; 12 特别注意 附件 6 13 /** 14 * @author dongdong.fdd 15 * @date 2018/9/27 上午11:29 16 */ 17 public class T { 18 public static void main(String[] args) 19 throws InvalidKeyException, UnsupportedEncodingException, No SuchAlgorithmException { 20 long timestamp = System.currentTimeMillis() / 1000; 21 String paramValuesStr = "allAMAP-TRAFFIC-BRAIN10" + timestam p;//该值为排好序的参数的参数值拼接结果 22 String clientSecret = "testclientsecret";//该值为申请到的client Secret 23 24 Mac mac = Mac.getInstance("HmacSHA256"); 25 byte[] secretByte = clientSecret.getBytes("UTF-8"); 26 byte[] dataBytes = paramValuesStr.getBytes("UTF-8"); 27 28 SecretKey secretKey = new SecretKeySpec(secretByte,"HMACSHA2 56"); 29 mac.init(secretKey); 30 31 byte[] doFinal = mac.doFinal(dataBytes); 32 byte[] hexB = new Hex().encode(doFinal); 33 34 String digest = new String(hexB, "utf-8");//计算好的签名 26f2042cde2e9ca01d41ecdb27a91fd9b84f0263c411bcb13b195ec589096885 35 System.out.println(digest); 36 37 String resultUrl = "http://et-api.amap.com/index/cityRankin g?adcodes=all&clientKey=AMAP-TRAFFIC-BRAIN&size=10&timestamp="+times tamp+"&digest=" + digest; 38 System.out.println(resultUrl); 39 } 将这段代码使用python实现
07-14

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值