首页 > 代码库 > http://acm.hnu.cn/online/?action=problem&type=show&id=12817&courseid=267 7.19hnu/数据结构/数学 xxs.code
http://acm.hnu.cn/online/?action=problem&type=show&id=12817&courseid=267 7.19hnu/数据结构/数学 xxs.code
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<deque> 6 #include<cstdlib> 7 using namespace std; 8 typedef long long INT; 9 const INT MOD = 1000000007; 10 const int maxn = 2000000+5;11 char str[maxn],temp[maxn];12 int get_num(INT s,INT t)13 {14 for(int i = 0;i < t;++i)15 {16 s = s >> 1;17 if(s == 0)18 return 0;19 }20 return s;21 }22 int main()23 {24 while(gets(temp))25 {26 if(temp[0] == ‘#‘)27 break;28 int len = strlen(temp),f = 0;29 for(int i = 0;i < len; ++i)30 if(temp[i] != ‘ ‘)31 str[f++] = temp[i];32 str[f] = NULL;33 len = f;34 deque<INT> que1;35 deque<char> que2;36 //预处理37 for(int i = 0;i < len-2;++i)38 if(str[i] == ‘>‘ && str[i+1] == ‘>‘ && str[i+2] != ‘>‘)39 str[i] = str[i+1] = ‘^‘;40 char ss[20]; //缓存数字41 for(int i = 0;i < len;++i)42 {43 if(str[i] == ‘S‘ || str[i] == ‘s‘)44 {45 i++;46 que2.push_front(‘<‘);47 }48 if(str[i] == ‘>‘)49 {50 INT tt = *que1.begin();51 que1.pop_front();52 que2.pop_front(); //计算完后把‘<‘弹出来53 tt *= tt;54 tt %= MOD;55 if(*que2.begin() == ‘^‘)56 {57 INT tt2 = *que1.begin();58 que1.pop_front();59 que1.push_front(get_num(tt2,tt));60 que2.pop_front();61 }62 else que1.push_front(tt);63 }64 if(str[i] == ‘^‘)65 {66 i++;67 que2.push_front(‘^‘);68 }69 if(str[i] >= ‘0‘ && str[i] <= ‘9‘)70 {71 int ll = 0;72 while(str[i] >= ‘0‘ && str[i] <= ‘9‘)73 {74 ss[ll++] = str[i];75 i++;76 }77 i--;78 ss[ll] = NULL;79 int tt = atoi(ss);80 if(*que2.begin() == ‘^‘)81 {82 int tt2 = *que1.begin();83 que1.pop_front();84 que2.pop_front();85 que1.push_front(get_num(tt2,tt)); //get_num计算tt2 >> tt之后压回到栈中86 }87 else que1.push_front(tt);88 }89 }90 91 printf("%d\n",*que1.begin());92 que2.clear();93 que1.clear();94 }95 return 0;96 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。