zoukankan      html  css  js  c++  java
  • ACM ICPC Asia Regional 2011 Kuala Lumpur(马来西亚吉隆坡) [7月16日暑假集训]

    比赛地址:

    http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=9589#overview

    A .Smooth Visualization  [签到题]

      直接模拟,注意下数只有一位的情况。

    C .Equivalence  [表达式求值/后缀表达式]

      给定两个表达式,含有数字、字符(‘a’~‘z’、‘A’~‘Z’)、+-*和括号()以及其他字符(其他字符如空格、tab等不处理),判断是否等价。

      首先把中缀表达式转换成后缀表达式,再对后缀表达式求值。字符代如具体的值,如果值不同,则表达式不相等,如果相同则可能相同。可以多测几组值,如果值都相同则可判定表达式相同。

      关于用后缀表达式求表达式的值:

      http://blog.csdn.net/daheiantian/article/details/6553713

      http://blog.csdn.net/niushuai666/article/details/6702964

      代码;

    View Code
     1 //zzy2012,7,17AC
     2 //后缀表达式 带符号表达式比较是否相同(支持+、-、*和括号,字符和数字都是单字符)
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<iostream>
     6 
     7 using namespace std;
     8 char s1[100],s2[100],a1[100],a2[100],stack[100];
     9 int st[100],var[150];
    10 
    11 int trans(char s[100],char a[199],int lens,char stack[100]){
    12     int top = 0,lena = 0;
    13     for(int i=0; i<lens; i++){
    14         if((s[i]>='0' && s[i]<='9') || (s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z'))
    15             a[lena++] = s[i];
    16         else if(s[i] == '+' || s[i] == '-'){
    17             while(top>0 && stack[top-1]!='(')
    18                 a[lena++] = stack[--top];
    19             stack[top++] = s[i];
    20         }
    21         else if(s[i] == '*'){
    22             while(top>0 && stack[top-1]!='(' && stack[top-1]!='+' && stack[top-1]!='-')
    23                 a[lena++] = stack[--top];
    24             stack[top++] = s[i];
    25         }
    26         else if(s[i]=='(')
    27             stack[top++] = s[i];
    28         else if(s[i]==')'){
    29             while(stack[top-1]!='(')
    30                 a[lena++] = stack[--top];
    31             top--;
    32         }
    33     }
    34     while(top>0)
    35         a[lena++] = stack[--top];
    36     return lena;
    37 }
    38 
    39 int calcu(char a[100],int stack[100],int var[150],int lena){
    40     int top = 0;
    41     for(int i=0; i<lena; i++){
    42         if(a[i]>='0' && a[i]<='9')
    43             stack[top++] = a[i]-'0';
    44         else if((a[i]>='A' && a[i]<='Z') || (a[i]>='a' && a[i]<='z'))
    45             stack[top++] = var[a[i]];
    46         else{
    47             if(a[i] == '*')
    48                 stack[top-2] = stack[top-2] * stack[top-1];
    49             else if(a[i] == '+')
    50                 stack[top-2] = stack[top-2] + stack[top-1];
    51             else if(a[i] == '-')
    52                 stack[top-2] = stack[top-2] - stack[top-1];
    53             top--;
    54         }
    55     }
    56     return stack[0];
    57 }
    58 
    59 int main()
    60 {
    61     int T,lens1,lens2,lena1,lena2,v1,v2;
    62     bool sign;
    63     cin>>T;
    64     gets(s1);
    65     while(T--){
    66         gets(s1);
    67         gets(s2);
    68         lens1 = strlen(s1);
    69         lens2 = strlen(s2);
    70         lena1 = trans(s1,a1,lens1,stack);
    71         lena2 = trans(s2,a2,lens2,stack);
    72         sign = true;
    73         for(int i = 1; i<10 && sign == true; i++){
    74             for(int j=0; j<150; j++)
    75                 var[j] = (j-60) * i + 11;
    76             v1 = calcu(a1,st,var,lena1);
    77             v2 = calcu(a2,st,var,lena2);
    78             if(v1!=v2) sign = false;
    79         }
    80         if(sign == false)
    81             printf("NO\n");
    82         else
    83             printf("YES\n");
    84     }
    85     return 0;
    86 }

    D .Tree Inspections  [序列处理]

      先把树的位置按y坐标排序,水平路也按y坐标排序。在某两条路之间的点,判断其是否可以被看见,可以通过一个标记数组。x坐标同样处理,最后统计有多少点可以被看见。

  • 相关阅读:
    ThinkPHP5 API 文档
    【转】移动web页面使用字体的思考
    【原】移动web页面兼容处理的思考
    20140829分享正则大纲
    javascript reverse string
    备忘“与”、“非”、“或”、“异或” 运算
    关于 Apple Metal API 的一些想法
    transform:rotate在手机上显示有锯齿的解决方案
    JS正则表达式验证数字(很全)
    去掉 wap (android/ios)网页等点击后的阴影
  • 原文地址:https://www.cnblogs.com/Lattexiaoyu/p/2596464.html
Copyright © 2011-2022 走看看