#include <stdio.h> |
002 | #include <ctype.h> |
003 | #include <string.h> |
004 | int num[100]; |
005 | char op[100]; |
006 | int numcou = 0; |
007 | int opcou = 0; |
008 | void pushnum(int n) |
009 | { |
010 | num[numcou++] = n; |
011 | } |
012 | void pushop(char c) |
013 | { |
014 | op[opcou++] = c; |
015 | } |
016 | int numpop() |
017 | { |
018 | return num[--numcou]; |
019 | } |
020 | char oppop() |
021 | { |
022 | return op[--opcou]; |
023 | } |
024 | char opc[7] = {'+', '-', '*', '/', '(', ')', '#'}; |
025 | int p[7][7] = { |
026 | {1,1,-1,-1,-1,1,1}, |
027 | {1,1,-1,-1,-1,1,1}, |
028 | {1,1,1,1,-1,1,1}, |
029 | {1,1,1,1,-1,1,1}, |
030 | {-1,-1,-1,-1,-1,0,-2}, |
031 | {1,1,1,1,-2,1,1}, |
032 | {-1,-1,-1,-1,-1,-2,0} |
033 | }; |
034 | int pri(char s, char e) |
035 | { |
036 | int i, j, k; |
037 | for (i=0; i<7; i++) |
038 | { |
039 | if (s == opc[i]) |
040 | j = i; |
041 | if (e == opc[i]) |
042 | { |
043 | k = i; |
044 | } |
045 | } |
046 | return p[j][k]; |
047 | } |
048 | int result(int first, int second, char c) |
049 | { |
050 | switch(c) |
051 | { |
052 | case '+': |
053 | return first + second; |
054 | break; |
055 | case '-': |
056 | return first - second; |
057 | break; |
058 | case '*': |
059 | return first * second; |
060 | break; |
061 | case '/': |
062 | return first / second; |
063 | break; |
064 | } |
065 | } |
066 | int calc(char *exp) |
067 | { |
068 | char c; |
069 | int first; |
070 | int second; |
071 | numcou = 0; |
072 | opcou = 0; |
073 | pushop('#'); |
074 | while (*exp!='#' || op[opcou-1]!='#') |
075 | { |
076 | if (isdigit(*exp)) |
077 | { |
078 | pushnum(*exp-'0'); |
079 | exp++; |
080 | continue; |
081 | } |
082 | else if (isalpha(*exp)) |
083 | { |
084 | pushnum(*exp-'a'+10); |
085 | exp++; |
086 | continue; |
087 | } |
088 | else if (*exp=='+' || *exp=='-' || *exp=='*' || *exp=='#' || *exp=='(' || *exp==')') |
089 | { |
090 | switch(pri(op[opcou-1], *exp)) |
091 | { |
092 | case 1: |
093 | c = oppop(); |
094 | second = numpop(); |
095 | first = numpop(); |
096 | pushnum(result(first, second, c)); |
097 | break; |
098 | case 0: |
099 | oppop(); |
100 | exp++; |
101 | break; |
102 | case -1: |
103 | pushop(*exp); |
104 | exp++; |
105 | break; |
106 | default: |
107 | break; |
108 | } |
109 | } |
110 | else |
111 | exp++; |
112 | |
113 | } |
114 | return num[numcou-1]; |
115 | } |
116 | int main() |
117 | { |
118 | int n, len; |
119 | char fir[100], sec[100]; |
120 | while (scanf("%d", &n)!=EOF) |
121 | { |
122 | getchar(); |
123 | while (n--) |
124 | { |
125 |
126 | gets(fir); |
127 | len = strlen(fir); |
128 | fir[len] = '#'; |
129 | gets(sec); |
130 | len = strlen(sec); |
131 | sec[len] = '#'; |
132 | if (calc(fir) == calc(sec)) |
133 | printf("YES\n"); |
134 | else |
135 | printf("NO\n"); |
136 | } |
137 | } |
138 | return 0; |
139 | } |
本文深入探讨了AI音视频处理领域中的视频分割与语义识别技术,介绍了视频分割的基本概念、常见算法及其在实际应用中的案例。同时,详细解释了语义识别的过程、关键步骤和技术挑战,并分享了该技术在自动驾驶、AR等领域中的应用实例。
210

被折叠的 条评论
为什么被折叠?



