文章目录

  • 1.题目
    • 1.1 题目介绍
    • 1.2.输入
    • 1.3 输出
    • 1.4 限制
  • 2.题解
  • 3.总结
  • 4.分享

1.题目

1.1 题目介绍

通过金融风控的资金流水分析,可有效识别循环转账,辅助公安挖掘洗钱组织,帮助银行预防信用卡诈骗。基于给定的资金流水,检测并输出指定约束条件的所有循环转账,结果准确,用时最短者胜。

1.2.输入

输入为包含资金流水的文本文件,每一行代表一次资金交易记录,包含本端账号ID, 对端账号ID, 转账金额,用逗号隔开。
 本端账号ID和对端账号ID为一个32位的无符号整数
 转账金额为一个32位的无符号整数
 转账记录最多为28万条
 每个账号平均转账记录数< 10
 账号A给账号B最多转账一次
举例如下,其中第一行[1,2,100]表示ID为1的账户给ID为2的账户转账100元:
1,2,100
1,3,100
2,4,90
3,4,50
4,1,95
2,5,95
5,4,90
4,6,30
6,7,29
7,4,28

1.3 输出

输出信息为一个文件,包含如下信息:
 第一行输出:满足限制条件下的循环转账个数。
说明:数据集经过处理,会保证满足条件的循环转账个数小于300万。
 第二行开始:输出所有满足限制条件的循环转账路径详情。
输出循环转账路径要按照指定排序策略进行排序:每条循环转账中,ID(ID转为无符号整数后)最小的第一个输出;总体按照循环转账路径长度升序排序;同一级别的路径长度下循环转账账号ID序列,按照字典序(ID转为无符号整数后)升序排序。
举例如下:
4
1,2,4
1,3,4
4,6,7
1,2,5,4

1.4 限制

循环转账的路径长度最小为3(包含3)最大为7(包含7),例如账户A给账户B转账,账户B给账户A转账,循环转账的路径长度为2,不满足循环转账条件。

2.题解

上面小例子来个小图解:
在这里插入图片描述
其实看到图之后,一切都很明了了,就是一个深度遍历,然后标志找环的问题,拿到题目第一反应就是这个,确实,这个思路可以,所以撸代码了,先撸了一个java版本的(非常原生态):

import java.io.*;
import java.util.*;public class Main_stackFix {/*可以优化*/static HashSet<List<Integer>> hashSet = new HashSet<>();  //去重int len = 0;boolean flag = true;public void dfs(Node node, List<Integer> list, int index) { //两个用于标志的数组功能不同,一个是用于记录路径,一个是用于记录深度遍历时是否到过该点if (node == null) {flag = false;return;}//限制递归深度,防止爆栈if (list.size() >7){flag = false;return;}//如果回到原来遍历过的点,说明有环不需要再往下遍历了,把这个环作为答案记录下来if (list.contains(node.value)) {// 只要路径大于等于3,或者路径小于等于7的结果if ((list.size() - findIndex(list, node.value)) >= 3 && (list.size() - findIndex(list, node.value)) <= 7) {ArrayList<Integer> help = new ArrayList<>();for (int i = findIndex(list, node.value); i < list.size(); i++) {help.add(list.get(i));}rotate(help);hashSet.add(help);}flag = false;return;}list.add(node.value);for (int i = 0; i < node.nexts.size(); i++) {dfs(node.nexts.get(i), list, index + 1);if (flag) {list.remove(list.size() - 1);index--;flag = false;}}flag = true;return;}//通过数字找indexpublic int findIndex(List<Integer> list, Integer num) {for (int j = 0; j < list.size(); j++) {if (list.get(j).equals(num)) {return j;}}return -1;}/*======================结果处理=======================*///旋转数组中的元素public void rotate(List<Integer> list) {int min = list.get(0);for (int i = 1; i < list.size(); i++) {min = Math.min(min, list.get(i));}while (list.get(0) != min) {Integer temp = list.get(0);for (int i = 1; i < list.size(); i++) {list.set(i - 1, list.get(i));}list.set(list.size() - 1, temp);}}//格式转换public List<Integer>[] transfer(List<List<Integer>> lists){List<Integer>[] list = new List[lists.size()];for (int i = 0;i < lists.size();i++){list[i] = lists.get(i);}return list;}//字典的比较器1static class SizeComparator implements Comparator<List<Integer>> {@Overridepublic int compare(List<Integer> l1, List<Integer> l2) {if (l1.size() > l2.size()){return 1;}else {if (l1.size() == l2.size()){for (int i = 0;i < l1.size();i++){if (!l1.get(i).equals(l2.get(i))){if (l1.get(i) > l2.get(i)){return 1;}else {return -1;}}}}return -1;}}}/*=====================================读取文件=========================================*/public Integer[][] loadFile(String fileName, boolean skipTitle) {BufferedReader reader = null;try {reader = new BufferedReader(new FileReader(fileName));} catch (FileNotFoundException exception) {System.err.println(fileName + " File Not Found");return null;}List<List<Integer>> listArr = new ArrayList<>();String line = "";try {if (skipTitle) {reader.readLine();}while ((line = reader.readLine()) != null) {List<Integer> list = new ArrayList<>();String item[] = line.split(",");for (int i = 0; i < item.length; i++) {list.add(Integer.parseInt(item[i]));}listArr.add(list);}} catch (IOException exception) {System.err.println(exception.getMessage());}Integer[][] matrix = new Integer[listArr.size()][listArr.get(0).size()];for (int i = 0; i < listArr.size(); i++) {for (int j = 0; j < listArr.get(i).size(); j++) {matrix[i][j] = listArr.get(i).get(j);}}return matrix;}/*=====================================写入文件=========================================*/private void saveResult(List<Integer>[] listsAns, String predictFileName) {try {BufferedWriter out = new BufferedWriter(new FileWriter(predictFileName));System.out.println(listsAns.length);out.write(listsAns.length + "\r\n");for (int i = 0; i < listsAns.length; i++) {String str = listToString(listsAns[i], ',');out.write(str + "\r\n");}out.close();} catch (IOException exception) {System.err.println(exception.getMessage());}}//list转字符串public static String listToString(List list, char separator) {StringBuilder sb = new StringBuilder();for (int i = 0; i < list.size(); i++) {if (i == list.size() - 1) {sb.append(list.get(i));} else {sb.append(list.get(i));sb.append(separator);}}return sb.toString();}/*=================图的数据结构及操作=================*///生成图public Graph createGraph(Integer[][] matrix) {Graph graph = new Graph();for (int i = 0; i < matrix.length; i++) {Integer from = matrix[i][0];Integer to = matrix[i][1];if (!graph.nodes.containsKey(from)) {graph.nodes.put(from, new Node(from));}if (!graph.nodes.containsKey(to)) {graph.nodes.put(to, new Node(to));}Node fromNode = graph.nodes.get(from);Node toNode = graph.nodes.get(to);Edge newEdge = new Edge(fromNode, toNode);fromNode.nexts.add(toNode);fromNode.out++;toNode.in++;fromNode.edges.add(newEdge);graph.edges.add(newEdge);}return graph;}//边class Edge {public Node from;public Node to;public Edge(Node from, Node to) {this.from = from;this.to = to;}}//点class Node {public int value;public int in;public int out;public ArrayList<Node> nexts;public ArrayList<Edge> edges;public Node(int value) {this.value = value;in = 0;out = 0;nexts = new ArrayList<Node>();edges = new ArrayList<Edge>();}}//图class Graph {public HashMap<Integer, Node> nodes;public HashSet<Edge> edges;public Graph() {nodes = new HashMap<Integer, Node>();edges = new HashSet<Edge>();}}/*=====================主函数========================*/public static void main(String[] args) {/*====================测试示例数据============================*/Main_stackFix m = new Main_stackFix();Integer[][] doubles = {{1, 2, 100}, {1, 3, 100}, {2, 4, 90}, {3, 4, 50}, {4, 1, 95}, {2, 5, 95}, {5, 4, 90}, {4, 6, 30}, {6, 7, 29}, {7, 4, 28}};
//        Integer[][] doubles = {{1,2,100},{2,5,90},{5,4,95},{4,1,39}};long  createGraphStartTime = System.currentTimeMillis();Graph graph = m.createGraph(doubles);long  createGraphEndTime = System.currentTimeMillis();System.out.println("创建图的时间:"  + (createGraphEndTime - createGraphStartTime));System.out.println("=========================");long  searchStartTime = System.currentTimeMillis();//遍历所有非连通图for (int k = 0; k < doubles.length; k++) {ArrayList<Integer> list = new ArrayList<>();m.dfs(graph.nodes.get(doubles[k][0]), list, 0);}long  searchEndTime = System.currentTimeMillis();System.out.println("搜索全图的时间:" + (searchEndTime - searchStartTime));long  setToListStartTime = System.currentTimeMillis();ArrayList<List<Integer>> lists = new ArrayList<>(hashSet);long  setToListEndTime = System.currentTimeMillis();System.out.println("Set转成Lists的时间:" + (setToListEndTime - setToListStartTime));long  listToArrayStartTime = System.currentTimeMillis();List<Integer>[] transferedData = m.transfer(lists);long  listToArrayEndTime = System.currentTimeMillis();System.out.println("Lists转成数组使用的时间:" + (listToArrayEndTime - listToArrayStartTime));long  listsOrderStartTime = System.currentTimeMillis();Arrays.sort(transferedData,new SizeComparator());long  listsOrderEndTime = System.currentTimeMillis();System.out.println("list排序完的时间:" + (listsOrderEndTime - listsOrderStartTime));long  saveStartTime = System.currentTimeMillis();m.saveResult(transferedData, "F:\\zhou_huaweiTest\\HWcode2020-TestData-master\\testData\\result_data.txt");long  saveEndTime = System.currentTimeMillis();System.out.println("保存数据到txt过程需要的时间" + (saveEndTime - saveStartTime));/*====================测试rotate()============================*/System.out.println("==========");List<Integer> list = new ArrayList<>();list.add(2);list.add(3);list.add(1);list.add(4);Main_stackFix m2 = new Main_stackFix();m2.rotate(list);for (Integer in:list){System.out.println(in);}}
}

上边代码也不是我最初敲的,组里的小伙伴做了,然后我接着完善了一点,算法很粗糙,没有美感,很暴力,关键是真的很耗时。。。
后边为了加快开发速度,上了python版本的,这是在参照了github上边的一个大佬的做法然后做的6+1版本:

import os
import numpy as np
import datetime# -------------------输入输出--------------------------def readData(filename):data = []f = open(filename)for line in f:line = list(map(int, line.split(',')))data.append(line)return datadef writeFile(fileName, res, t1, t2):f = open(fileName, 'w')cnt = 0for r in res:cnt += len(r)f.write(str(cnt)+'\n')for rr in res:for r in rr:for i in range(len(r)-1):f.write(t1[r[i]])f.write(t2[r[len(r)-1]])# ------------------点编号转换为连续id---------------------def convert(data):l = []d = {}for line in data:l.append(line[0])l.append(line[1])st = list(set(l))  # 其实这儿求交集更好,懒得改了st.sort()  # 排个序,输出就不用排序了for i in range(len(st)):d[st[i]] = ifor i in range(len(data)):data[i][0] = d[data[i][0]]data[i][1] = d[data[i][1]]trans1 = [str(v)+',' for v in st]trans2 = [str(v)+'\n' for v in st]return trans1, trans2, data# -------------------建立邻接表-----------------------------def createGraph(data, n):g = [[] for i in range(n)]g1 = [[] for i in range(n)]  # 反向图for line in data:g[line[0]].append(line[1])g1[line[1]].append(line[0])for i in range(n):g[i].sort()  # 排序,为了输出有序g1[i].sort()return g, g1# -------------------深度遍历找环--------------------------# 6+1思路:利用反向图标记可能成为环的倒数第一个点,再进行深度为6的搜索,搜索到被标记的点则成环。def dfs(g, k, p_o, visit, visit1, res, path):for i in range(len(g[k])):v = g[k][i]if v < p_o:  # 小于查询点p_o的点都不用访问continueif visit1[v] == -2 and visit[v] == 0:  # 当碰到倒数第一个点且这个点未被访问过,则找到一条路径path.append(v)  # 把倒数第一个点加入路径中length = len(path)if length > 2:print(f"res:.............  {res}")print(f"path:.............  {path}")res[length-3].append(path.copy())print(f"res:.............  {res}")print(f"path:.............  {path}")path.pop()if visit[v] == 1 or (visit1[v] != p_o and visit1[v] != -2):continueif len(path) == 6 or v == p_o:  # 当搜索长度到6 或者 访问到查询点p_o就不继续访问了continuevisit[v] = 1  # 访问vpath.append(v)dfs(g, v, p_o, visit, visit1, res, path)path.pop()visit[v] = 0  # 退出v点,取消访问标记# ----------------------剪枝操作-----------------------------# 3邻域剪枝思路:如果将图看作是无向图,一个点数为7的环中,距离起点最远的点距离不超过3def dfs1(g, k, p_o, visit, visit1, length):for i in range(len(g[k])):if g[k][i] < p_o or visit[g[k][i]] == 1:  # 1.小于查询点p_o的点都不用访问了;  2.当前查询中已经访问过的点不用再访问;continue# p_o为当前查找环的点,把距离p_o小于等于3的点标记为p_o(也可以标记为1,不过结束查询p_o点之后要,重新标记为-1)visit1[g[k][i]] = p_oif length == 3:continuevisit[g[k][i]] = 1dfs1(g, g[k][i], p_o, visit, visit1, length+1)visit[g[k][i]] = 0if __name__ == "__main__":start = datetime.datetime.now()# -------------------输入---------------------------data = readData('C:\\Users\\Desktop\\testData-28W\\test_data.txt')# data = readData('/data/test_data.txt')t1, t2, data = convert(data)# --------------------处理----------------------------n = len(t1)g, g1 = createGraph(data, n)visit = [0 for i in range(n)]visit1 = [-1 for i in range(n)]  # 确定3邻域path = []res = [[] for i in range(5)]  # 长度分别为3,4,5,6,7的路径for i in range(n):# --------------3邻域剪枝----------------------------------# 分别遍历g,g1确定查询点i的3邻域# 把距离小于3的点的visit1标记为i,这样就确定了3邻域(不标记为1或者0是因为每次循环不用重新初始化visit1,为了省时间)dfs1(g, i, i, visit, visit1, 1)dfs1(g1, i, i, visit, visit1, 1)# --------------深度遍历找环--------------------------------for j in range(len(g1[i])):# 将倒数第一个点(6+1)visit1标记为-2,其实可以新建一个visit2来标记的,要容易理解些。visit1[g1[i][j]] = -2path.append(i)dfs(g, i, i, visit, visit1, res, path)  # 找查询点i的所有环path.pop()for j in range(len(g1[i])):visit1[g1[i][j]] = i  # 清除visit1 "-2" 的标记# ---------------------输出-------------------------# writeFile('/projects/student/result.txt', res, t1, t2)writeFile('C:\\Users\\Desktop\\testData-28W\\result\\pyLocal\\result423-1.txt', res, t1, t2)end = datetime.datetime.now()runtime = end - startprint(f"运行时长:{runtime}")

这个速度就快多了,本地跑28W的那个数据集已经可以压缩到了32s,而线上的提交的速度29:
在这里插入图片描述
还是很慢,不过组里大家对py不在行,都是java的,所以换了一种语言给他们,还优化了一些小细节:

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;/*** @Date: 2020/4/22**/
public class Main {//记录顶点的数量private static List<Integer> transList;private static List<Integer>[] g1;private static List<Integer>[] g2;private static List<Integer> visited1;private static List<Integer> visited2;private static MyList<Integer> path;private static List<List<Integer>>[] res;static class MyList<T> extends ArrayList implements Cloneable {//重写Object类的clone方法@Overridepublic Object clone() {Object obj = null;//调用Object类的clone方法,返回一个Object实例obj = super.clone();return obj;}}/*** 将原始数据进行转换,并返回顶点数组*/public Integer[][] convertData(Integer[][] data) {List<Integer> list = new ArrayList<>();for (int i = 0; i < data.length; i++) {list.add(data[i][0]);list.add(data[i][1]);}//快速去重,并排好序Set<Integer> set = new HashSet<Integer>(list);List<Integer> newList = new ArrayList<>(set);Collections.sort(newList);//获得排好序的新序列,并保存transList = newList;Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < newList.size(); i++) {map.put(newList.get(i), i);}//对输入数组进行转换,方便建表for (int i = 0; i < data.length; i++) {data[i][0] = map.get(data[i][0]);data[i][1] = map.get(data[i][1]);}return data;}/*** 建立邻接表,包括正向的和反向的都建立*/public void createGraph(Integer[][] data, int n) {//初始化两个要输出的表g1 = new List[n];g2 = new List[n];for (int i = 0; i < n; i++) {g1[i] = new ArrayList<>();g2[i] = new ArrayList<>();}for (Integer[] line : data) {//line:data[0] data[1] 。。。表示一行的数据g1[line[0]].add(line[1]);g2[line[1]].add(line[0]);}for (int i = 0; i < n; i++) {g1[i].sort(Comparator.comparingInt((Integer o) -> o));g2[i].sort(Comparator.comparingInt((Integer o) -> o));}}/*** 完成剪枝操作* 3邻域剪枝思路:如果将图看作是无向图,一个点数为7的环中,距离起点最远的点距离不超过3*/public void cut(List<Integer>[] graph, int k, int f_index, List<Integer> visited1, List<Integer> visited2, int length) {//1.小于查询点p_o的点都不用访问了;  2.当前查询中已经访问过的点不用再访问;for (int i = 0; i < graph[k].size(); i++) {if (graph[k].get(i) < f_index || visited1.get(graph[k].get(i)) == 1) {continue;}// f_index为当前查找环的点,把距离f_index小于等于3的点标记为f_index(也可以标记为1,不过结束查询f_index点之后要,重新标记为-1)visited2.set(graph[k].get(i), f_index);if (length == 3) {continue;}visited1.set(graph[k].get(i), 1);cut(graph, graph[k].get(i), f_index, visited1, visited2, length + 1);visited1.set(graph[k].get(i), 0);}}/*** 深度搜索找环* 6+1思路:利用反向图标记可能成为环的倒数第一个点,再进行深度为6的搜索,搜索到被标记的点则成环。*/public void deepFindCircle(List<Integer>[] graph, int k, int f_index, List<Integer> visited1, List<Integer> visited2, List<List<Integer>>[] res, MyList<Integer> path) {for (int i = 0; i < graph[k].size(); i++) {int v = graph[k].get(i);// 小于查询点p_o的点都不用访问if (v < f_index) {continue;}//当碰到倒数第一个点且这个点未被访问过,则找到一条路径if (visited2.get(v) == -2 && visited1.get(v) == 0) {//把倒数第一个点加入路径中path.add(v);int len = path.size();if (len > 2) {res[len - 3].add((List<Integer>) path.clone());}path.remove(path.size() - 1);}if (visited1.get(v) == 1 || (visited2.get(v) != f_index && visited2.get(v) != -2)) {continue;}//当搜索长度到6或者访问到查询点f_index就不继续访问了if (path.size() == 6 || v == f_index) {continue;}//访问vvisited1.set(v, 1);path.add(v);deepFindCircle(graph, v, f_index, visited1, visited2, res, path);path.remove(path.size() - 1);//退出v点,取消访问标记visited1.set(v, 0);}}/*** 读入文件方法*/public Integer[][] readFromFile(String fileName) {// 使用ArrayList来存储每行读取到的字符串ArrayList<String> arrayList = new ArrayList<>();try {File file = new File(fileName);InputStreamReader input = new InputStreamReader(new FileInputStream(file));BufferedReader bf = new BufferedReader(input);// 按行读取字符串String str;while ((str = bf.readLine()) != null) {arrayList.add(str);}bf.close();input.close();} catch (IOException e) {e.printStackTrace();}// 对ArrayList中存储的字符串进行处理int length = arrayList.size();Integer array[][] = new Integer[length][2];for (int i = 0; i < length; i++) {String s1 = arrayList.get(i).split(",")[0];String s2 = arrayList.get(i).split(",")[1];array[i][0] = Integer.parseInt(s1);array[i][1] = Integer.parseInt(s2);}// 返回数组return array;}/*** 写入文件*/public void writeToFile(List<List<Integer>>[] result, String fileName, String[] t1, String[] t2) {try {File file = new File(fileName);FileOutputStream fos = new FileOutputStream(file);BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));//4.准备数据,往缓冲区中写数据int sum = 0;for (List<List<Integer>> ooLine : result) {sum += ooLine.size();}//写入第一行:总数bw.write(sum + "\n");//优化!!!for (List<List<Integer>> ooLine : result){for (List<Integer> oLine : ooLine) {for (int i = 0; i < oLine.size() - 1; i++) {bw.write(t1[oLine.get(i)]);}bw.write(t2[oLine.get(oLine.size() - 1)]);}}//7.关闭流bw.close();fos.close();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {long start = System.currentTimeMillis();Main listMain = new Main();//读取数据  654
//        Integer[][] doubles = listMain.readFromFile("C:\\Users\\Desktop\\testData-28W\\test_data.txt");Integer[][] doubles = listMain.readFromFile("C:\\Users\\Desktop\\test_data.txt");
//        Integer[][] doubles = listMain.readFromFile("/data/test_data.txt");long end1 = System.currentTimeMillis();System.out.println("读取时间: " + (end1 - start));//转换原始数据   85Integer[][] data = listMain.convertData(doubles);long end2 = System.currentTimeMillis();System.out.println("转换数据时间: " + (end2 - end1));//建立邻接表   53int nodesNum = transList.size();listMain.createGraph(data, nodesNum);long end3 = System.currentTimeMillis();System.out.println("建立邻接表的时间: " + (end3 - end2));//初始化数据   0int[] visitArr = new int[nodesNum];int[] visit1Arr = new int[nodesNum];Arrays.fill(visit1Arr, -1);visited1 = Arrays.stream(visitArr).boxed().collect(Collectors.toList());visited2 = Arrays.stream(visit1Arr).boxed().collect(Collectors.toList());path = new MyList<>();res = new List[5];for (int i = 0; i < 5; i++) {res[i] = new ArrayList<>();}long end4 = System.currentTimeMillis();System.out.println("初始化数据时间: " + (end4 - end3));//核心算法    10681for (int i = 0; i < nodesNum; i++) {//--------------邻域剪枝----------------------------------//分别遍历g1,g2确定查询点i的3邻域//把距离小于3的点的visited2标记为i,这样就确定了3邻域(不标记为1或者0是因为每次循环不用重新初始化visited2,为了省时间)listMain.cut(g1, i, i, visited1, visited2, 1);listMain.cut(g2, i, i, visited1, visited2, 1);//--------------深度遍历找环--------------------------------for (int j = 0; j < g2[i].size(); j++) {//将倒数第一个点visited1标记为-2visited2.set(g2[i].get(j), -2);}path.add(i);//找查询点i的所有环listMain.deepFindCircle(g1, i, i, visited1, visited2, res, path);path.remove(path.size() - 1);for (int j = 0; j < g2[i].size(); j++) {//清除visited2中的 "-2" 的标记visited2.set(g2[i].get(j), i);}}long end5 = System.currentTimeMillis();System.out.println("核心算法时间: " + (end5 - end4));//写入结果前准备     12Integer[] array = transList.toArray(new Integer[nodesNum]);String[] t1 = new String[nodesNum];String[] t2 = new String[nodesNum];for (int i = 0; i < nodesNum; i++) {t1[i] = array[i] + ",";t2[i] = array[i] + "\n";}long end6 = System.currentTimeMillis();System.out.println("写入结果前准备: " + (end6 - end5));//写入文件     1181
//        listMain.writeToFile(listMain.res, "C:\\Users\\Desktop\\testData-28W\\result\\java28\\result424-1.txt", t1, t2);listMain.writeToFile(res, "C:\\Users\\Desktop\\result424-3.txt", t1, t2);
//        listMain.writeToFile(resArr,"/projects/student/result.txt");long end = System.currentTimeMillis();System.out.println("写入文件时间:" + (end - end6));//运行时间      12666System.out.println("运行时间:" + (end - start));}
}

这个自己手撸的java版本,线下跑14s,而线上提交后,大喜,线上才4.6多:
在这里插入图片描述
可以看出,其实核心算法选择6+1确实速度已经不错了,所以我们就决定继续沿用6+1的思路,准备改良,虽然这时候时间不多了,大概举例结束就两天吧,没办法,毕竟我们准备比赛太晚了,没准备充足,也是自己还菜。。。
队员搞一个改良版的核心算法,然后我继续将这些改成C的,就想试试换一种语言的话能不能更快,因为这次比赛华为基本也是官宣了,不适合javaer和pythoner参加的,所以,晚上加班,又改出来了一个c++版本的:

#include <bits/stdc++.h>using namespace std;#define TEST//给int起别名,int在这个工程中也可以使用ui表示了
typedef unsigned int ui;class Solution {
public:vector<vector<int>> G;vector<vector<int>> G2;unordered_map<ui, int> idHash; //sorted id to 0...nvector<ui> ids; //0...n to sorted idvector<ui> inputs; //u-v pairsvector<int> visited1;vector<int> visited2;vector<vector<vector<int>>> res;vector<int> path;int nodeCnt;int loopNum;void parseInput(string &testFile) {FILE *file = fopen(testFile.c_str(), "r");ui u, v, c;int cnt = 0;while (fscanf(file, "%u,%u,%u", &u, &v, &c) != EOF) {inputs.push_back(u);inputs.push_back(v);++cnt;}
#ifdef TESTprintf("%d Records in Total\n", cnt);
#endif}void constructGraph() {auto tmp = inputs;sort(tmp.begin(), tmp.end());tmp.erase(unique(tmp.begin(), tmp.end()), tmp.end());nodeCnt = tmp.size();ids = tmp;nodeCnt = 0;for (ui &x:tmp) {idHash[x] = nodeCnt++;}
#ifdef TESTprintf("%d Nodes in Total\n", nodeCnt);
#endifint sz = inputs.size();G = vector<vector<int>>(nodeCnt);G2 = vector<vector<int>>(nodeCnt);for (int i = 0; i < sz; i += 2) {int u = idHash[inputs[i]], v = idHash[inputs[i + 1]];G[u].push_back(v);G2[v].push_back(u);}}void dfs(vector<vector<int>> graph, int k, int f_index, vector<int> &visited1, vector<int> &visited2,vector<vector<vector<int>>> &res, vector<int> &path) {for (int i = 0; i < graph[k].size(); i++) {int v = graph[k][i];if (v < f_index) {continue;}if (visited2[v] == -2 && visited1[v] == 0) {path.push_back(v);int len = path.size();if (len > 2) {res[len - 3].push_back(path);loopNum++;}path.pop_back();}if (visited1[v] == 1 || (visited2[v] != f_index && visited2[v] != -2)) {continue;}if (path.size() == 6 || v == f_index){continue;}visited1[v] = 1;path.push_back(v);dfs(graph, v, f_index, visited1, visited2, res, path);path.pop_back();visited1[v] = 0;}}void cut(vector<vector<int>> graph, int k, int f_index, vector<int> &visited1, vector<int> &visited2, int length) {for (int i = 0; i < graph[k].size(); i++) {if (graph[k][i] < f_index || visited1[graph[k][i]] == 1) {continue;}visited2[graph[k][i]] = f_index;if (length == 3) {continue;}visited1[graph[k][i]] = 1;cut(graph, graph[k][i], f_index, visited1, visited2, length + 1);visited1[graph[k][i]] = 0;}}//search from 0...n//由于要求id最小的在前,因此搜索的全过程中不考虑比起点id更小的节点void solve() {loopNum = 0;vector<vector<vector<int>>> temp(5);res = temp;visited1 = vector<int>(nodeCnt, 0);visited2 = vector<int>(nodeCnt, -1);for (int i = 0; i < nodeCnt; i++) {if (!G[i].empty()) {//出度不为空才继续cut(G, i, i, visited1, visited2, 1);cut(G2, i, i, visited1, visited2, 1);for (int j = 0; j < G2[i].size(); j++) {visited2[G2[i][j]] = -2;}path.push_back(i);dfs(G,i,i,visited1, visited2, res, path);path.pop_back();for (int j = 0; j < G2[i].size(); j++) {visited2[G2[i][j]] = i;}}}}void save(string &outputFile) {ofstream out(outputFile);out << loopNum << endl;string t1[nodeCnt];string t2[nodeCnt];for (int i = 0; i < nodeCnt; ++i) {char temp[50] = "";sprintf(temp,"%d,",ids[i]);t1[i] = temp;sprintf(temp,"%d\n",ids[i]);t2[i] = temp;}for (auto ooLine:res) {for (auto oLine:ooLine) {for (int i = 0; i < oLine.size() - 1; ++i) {out << t1[oLine[i]];}out << t2[oLine[oLine.size() - 1]];}}}
};int main()
{
//    string testFile = "test_data2.txt";
//    string outputFile = "output.txt";
//    string testFile = "/data/test_data.txt";
//    string outputFile = "/projects/student/result.txt";string testFile = "C:\\Users\\Desktop\\testData-28W\\test_data.txt";
//    string testFile = "C:\\Users\\Desktop\\test_data.txt";string outputFile = "C:\\Users\\Desktop\\result424-27-2.txt";//#ifdef TEST
//    string answerFile = "result.txt";
//#endifauto t = clock();Solution solution;solution.parseInput(testFile);solution.constructGraph();//solution.topoSort();solution.solve();solution.save(outputFile);cout << "time:" << clock() - t << " mill" << endl;return 0;
}

由于c++用得少,已经很陌生了,很多东西都是一边敲一边百度的,所以做出来的效果可想而知,最终这个跑崩了···
在这里插入图片描述
哎,没准备好,大半夜的屁颠颠走去提交,满怀信心地等待,最终竟然是这个结果

今年的比赛几乎没有任何的准备,六天多的时间,也是由于疫情吧,天天都是自己一个人待在房间里拼命地撸代码,感觉人都快疯掉了,其实这种比赛除了考算法之外,对语言也有挺大的要求的,像我这种javaer真的很难深度参与进去,华为官方在一些帖子里也毫不遮掩地说java就是做开发的,不适合做算法。。。
在这里插入图片描述

3.总结

总结:

  • 真正的算法比赛真的几乎只适合C选手参加,不过选择python写思路,或者快速开发的话,py真的不二之选,而java就是万行(十万)以上级别,方便维护的系统的首选了。
  • 很多时候输入输出都要往mmap,即内存读写方面来思考,硬盘读写很慢,在比赛中不能用。
  • 算法是比赛的核心,需要多次改良的,没有一蹴而就的。同一个dfs,用不同的语言,不同的数据结构(数组,list,set,map等)实现的时候速度也会明显不一样,反正就是每一个小的细节都要有足够的思考,斟酌好才行。

总的来说,这个比赛是失败的吧,前期没准备好,队友一叫就热血沸腾地兴冲冲地踏进来了,时间没把握好,和队友两人的配合也还不熟练,毕竟第一次参加比赛,平时都为公司敲码的都快忘记还有算法这事了,以后还是要狠补算法了,毕竟面试还是看算法,不说了,好好学习吧。
(就自己做个笔记,让自己记住做过了这么个比赛而已,比赛最好的成绩就是107名了,成绩不好,就不贴图了,反正最后都被推到n名之外去的了。)

4.分享

先是在这次比赛中受益颇多的某大佬(知乎上Martin)的代码,真的很容易看懂,写得很好:

#include <bits/stdc++.h>
using namespace std;#define TEST//给unsigned int起别名,unsigned int在这个工程中也可以使用ui表示了
typedef unsigned int ui;
struct Path{//ID最小的第一个输出;//总体按照循环转账路径长度升序排序;//同一级别的路径长度下循环转账账号ID序列,按照字典序(ID转为无符号整数后)升序排序int length;vector<ui> path;Path(int length, const vector<ui> &path) : length(length), path(path) {}bool operator<(const Path&rhs)const{if(length!=rhs.length) return length<rhs.length;for(int i=0;i<length;i++){if(path[i]!=rhs.path[i])return path[i]<rhs.path[i];}}
};class Solution{
public:vector<vector<int>> G;unordered_map<ui,int> idHash; //sorted id to 0...nvector<ui> ids; //0...n to sorted idvector<ui> inputs; //u-v pairsvector<int> inDegrees;vector<bool> vis;vector<Path> ans;int nodeCnt;void parseInput(string &testFile){FILE* file=fopen(testFile.c_str(),"r");ui u,v,c;int cnt=0;while(fscanf(file,"%u,%u,%u",&u,&v,&c)!=EOF){inputs.push_back(u);inputs.push_back(v);++cnt;}
#ifdef TESTprintf("%d Records in Total\n",cnt);
#endif}void constructGraph(){auto tmp=inputs;sort(tmp.begin(),tmp.end());tmp.erase(unique(tmp.begin(),tmp.end()),tmp.end());nodeCnt=tmp.size();ids=tmp;nodeCnt=0;for(ui &x:tmp){idHash[x]=nodeCnt++;}
#ifdef TESTprintf("%d Nodes in Total\n",nodeCnt);
#endifint sz=inputs.size();G=vector<vector<int>>(nodeCnt);inDegrees=vector<int>(nodeCnt,0);for(int i=0;i<sz;i+=2){int u=idHash[inputs[i]],v=idHash[inputs[i+1]];G[u].push_back(v);++inDegrees[v];}}void dfs(int head,int cur,int depth,vector<int> &path){vis[cur]=true;path.push_back(cur);for(int &v:G[cur]){if(v==head && depth>=3 && depth<=7){vector<ui> tmp;for(int &x:path)tmp.push_back(ids[x]);ans.emplace_back(Path(depth,tmp));}if(depth<7 && !vis[v] && v>head){dfs(head,v,depth+1,path);}}vis[cur]=false;path.pop_back();}//search from 0...n//由于要求id最小的在前,因此搜索的全过程中不考虑比起点id更小的节点void solve(){vis=vector<bool>(nodeCnt,false);vector<int> path;for(int i=0;i<nodeCnt;i++){if(i%100==0)cout<<i<<"/"<<nodeCnt<<endl;if(!G[i].empty()){dfs(i,i,1,path);}}sort(ans.begin(),ans.end());}void save(string &outputFile){printf("Total Loops %d\n",(int)ans.size());ofstream out(outputFile);out<<ans.size()<<endl;for(auto &x:ans){auto path=x.path;int sz=path.size();out<<path[0];for(int i=1;i<sz;i++)out<<","<<path[i];out<<endl;}}
};int main()
{
//    string testFile = "test_data2.txt";
//    string outputFile = "output.txt";
//    string testFile = "C:\\Users\\24848\\Desktop\\testData-28W\\test\\test_data.txt";string testFile = "C:\\Users\\Desktop\\test_data.txt";string outputFile = "C:\\Users\\Desktop\\result424-266666666666.txt";//#ifdef TEST
//    string answerFile = "result.txt";
//#endifauto t=clock();
//    for(int i=0;i<100;i++){Solution solution;solution.parseInput(testFile);solution.constructGraph();//solution.topoSort();solution.solve();solution.save(outputFile);cout<< "time:" << clock()-t << " 毫秒" <<endl;
//    }return 0;
}

最后大赛期间收集的资料分享一波:
华为软挑资料收集分享

没想到竟然故事的结尾还有个意外。。。已经准备不做的第二天收到消息,不小心地拿了礼品和证书,只能说这个比赛神了。。。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. MySQL优化知识点

    目录一、设计方面1、存储引擎1.1、`InnoDB`1.2、MyISAM1.3、锁的概念2、字段类型选择3、范式与逆范式3.1、范式3.2、逆范式二、功能方面1、索引1.1、索引概述1.2、索引种类1.3、总结2、查询缓存`query_cache`2.1、开启2.2、注意事项3、分区3.1、分区算法3.2、分区管理与选择4、…...

    2024/4/27 16:42:23
  2. drools规则引擎基本语法(五)

    1,Drools提供的比较操作符,如下表:符号说明>大于<小于>=大于等于<=小于等于==等于!=不等于contains检查一个Fact对象的某个属性值是否包含一个指定的对象值not contains检查一个Fact对象的某个属性值是否不包含一个指定的对象值memberOf判断一个Fact对象的某个属…...

    2024/4/16 9:14:12
  3. openpose论文解读_思维导图

    本文的思维导图是简单对openpose论文解读_思维导图 高清版本请见 https://github.com/Lininggggggg/(求star) 或者csdn下载区https://download.csdn.net/download/Lininggggggg/12486301...

    2024/4/27 15:45:15
  4. Linux Mysql创建新用户并允许远程连接

    第一步 登陆mysql:mysql -u 数据库用户名 -h 数据库IP -p根据提示 输入数据库密码第二步:GRANT ALL PRIVILEGES ON *.* TO 自定义用户名@% IDENTIFIED BY 自定义密码 WITH GRANT OPTION;flush privileges;第三步 查看数据:SELECT DISTINCT CONCAT(User: ,user,@,host,;) AS …...

    2024/4/16 9:14:32
  5. idea 右下角不显示 Git Branch

    现象2. 底边框 右击3. 勾选 Git Branch...

    2024/4/24 9:54:43
  6. 日志文件log4j.properties的用法

    这个直接放到resources文件夹下即可 , 另外你得在D盘下创建一个axis.log的文件 , 运行起来即可看到 ,当然你也可以改路径 , 不过记得用双\不要用单 大家复制过去把文件名改成标题中的名字即可 # Set root category priority to INFO and its only appender to CONSOLE. #log4j.…...

    2024/4/27 14:17:04
  7. Matlab中欧拉角到旋转矩阵、旋转矩阵到欧拉角之间的转换关系

    Content欧拉角到旋转矩阵:旋转矩阵到欧拉角: 欧拉角到旋转矩阵: rotx(10)*roty(20)*rotz(30)这个是动态的旋转矩阵计算方法,即绕每次旋转之后的坐标系进行旋转。 旋转矩阵到欧拉角: dcm2angle()主要用这个函数进行,但是要区分是静态欧拉角还是动态的欧拉角。 如果是静态的…...

    2024/4/24 9:54:41
  8. CSS实现三角形

    效果:第一步:将div的宽、高都设为0 第二步:需要哪边的三角形,就设置哪条边的颜色,其余不要的设置为transparent 第三步:为了照顾兼容性 低版本的浏览器,加上 font-size: 0; line-height: 0; <!DOCTYPE html> <html><head><meta charset="UTF…...

    2024/4/27 13:30:59
  9. 【线性代数】行列式

    知识图谱总结 待续,,,...

    2024/4/27 18:28:22
  10. C# 图书管理系统【含 源代码+数据库】

    1.系统分析1.1基本需求功能点分析图书借阅管理系统,主要目标是简化现有的人工管理,通过科学的计算机管理图书借阅管理,提高工作效率,实现日常管理信息化,无纸化。1)系统用户主要分为两大类:a.管理员用户类(相当于一名有各种操作权限的超级用户) b.普通用户类。系统根据…...

    2024/4/27 14:20:56
  11. 元组字典集合

    元组(tuple) 当需要写入列表中元素不需要改变时,可以使用元组。 可以tuple[number]输出number对应的值。 如果元组不是空的,他至少必须有个’,’ 元组在定义时可以不加括号,例如: tup=1,2,3,4,5 print(tup)=(1,2,3,4,5) 元组的解包 a,b,c,d,e=tup 则a=1,b=2…...

    2024/4/24 9:54:38
  12. IDEA|WEBSTREAM安装注册

    IDEA|WEBSTREAM安装注册这里只讲注册,不解释里面全都有附件链接:https://pan.baidu.com/s/1I3EZ2RrolWJ0iALBsHZUgw 提取码:2y2w...

    2024/4/27 18:03:34
  13. AOSP SELinux error

    在Mac OS Catalina下编译AOSP报错:FAILED: build out/target/product/generic_x86_64/obj/ETC/sepolicy_tests_intermediates/sepolicy_tests Outputs: out/target/product/generic_x86_64/obj/ETC/sepolicy_tests_intermediates/sepolicy_tests Error: exited with code: 1 C…...

    2024/4/27 18:26:11
  14. PAT A1017 Queueing at Bank

    文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点 STL之priority_queue 实现 码前思考时间最好用秒数s来记录 需要记录到来时间,开始服务时间和结束服务时间; 记得考虑一个用户运气好,来的时候不用等; 记得按来的时间排序;代码实现 //每个window一个人,…...

    2024/4/24 9:54:35
  15. PixHawk飞控和Mission Planner地面站安装调试

    常用地面站软件主要有QGroundControl和MissionPlanner两种 下面以mission planner来介绍如何使用地面站软件进行固件升级和传感器校准一、PixHawk飞控配置www.pixhawk.com PixHawk官网:http://www.pixhawk.com/ 1.1 硬件配置主处理器:32位STM32F427,主频168 MHz ,256 KB RA…...

    2024/4/27 18:43:04
  16. Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to t

    这个是因为elasticsearch7.0 之后不支持type导致的…...

    2024/4/24 9:54:32
  17. day_8——LeetCode1:两数之和

    Day_8 —— LeetCode练习题:两数之和 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例: 给定 nums = [2, 7, 11…...

    2024/4/16 9:15:13
  18. Nginx+Tomcat做负载均衡

    Nginx+Tomcat做负载均衡开启虚拟机两台通过xshell连接此虚拟机,可能连接不上,由于权限问题,sudo chmod 777 +文件夹名称机器配置机器A配置:机器B配置:更改机器A,B的Tomcat配置,两台机器端口需不一致,然后 ./startup配置机器A和B的jdk环境变量 ,在etc/profile中添加配置机…...

    2024/4/27 14:33:34
  19. Makefile文件注释

    #目标文件 PROJECT = resnet50 #?=是如果没有定义,则定义 CXX ?= g++ CC ?= gcc CFLAGS += -O2 -Wall -Wpointer-arith -std=c++11 -ffast-math CFLAGS += -I…/common/ LDFLAGS += -ln2cube -lhineon -lopencv_videoio -lopencv_imgcod…...

    2024/4/15 5:58:28
  20. Go系列(零):Go基础

    Go语言入门Go是一门编译型语言,Go语言的工具链将源代码及其依赖转换成计算机的机器指令 Go语言提供的工具都通过一个单独的命令go调用,go命令有一系列子命令。go run helloworld.go # run指令,编译源文件,链接库文件,并允许最终生产的可执行文件go build helloworld.go #…...

    2024/4/16 9:15:28

最新文章

  1. 数组中的第K个最大元素

    215. 数组中的第K个最大元素 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1:…...

    2024/4/27 19:11:41
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. JVM总结

    类加载器与类的加载过程 ClassLoader只负责class文件的加载&#xff0c;至于它是否可以运行&#xff0c;则由Execution Engine决定。 加载阶段 通过一个类的全限定名获取定义此类的二进制字节流 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在内存中生成…...

    2024/4/26 4:35:04
  4. Docke搭建Lidarr

    Lidarr 是一个基于音乐的下载管理器&#xff0c;它可以监控多个 RSS 订阅源以查找用户指定类型的音乐并与支持的下载客户端协同工作。Lidarr 旨在自动化音乐下载过程&#xff0c;并整合到用户的音乐库中。它可以搜索歌曲&#xff0c;自动下载和整理音乐文件&#xff0c;更新元数…...

    2024/4/22 18:24:51
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57