第一道题 Beautiful Palindrome Number
,简单组合计数问题,手算打表就好~【第一次 提交竟然 wa了一次 有一个小小的坑在那。。。。
1 /********************************* 2 Author: jusonalien 3 Email : [email protected] 4 school: South China Normal University 5 Origin: 6 *********************************/ 7 #include <iostream> 8 #include <cstdio> 9 #include <map> 10 #include <cstring> 11 #include <string> 12 #include <set> 13 #include <queue> 14 #include <vector> 15 using namespace std; 16 int ans[7] = {1,9,18,54,90,174,258}; 17 int T; 18 int main(){ 19 cin>>T; 20 int k; 21 while(T--){ 22 cin>>k; 23 printf("%d\n",ans[k]); 24 } 25 return 0; 26 }
一开始想到的就是 线段树啥的,尼玛一个人在那想啊想啊,想到蛋碎 都没想到究竟要怎么操作,突然间想到能不能到时反过来 递推过去?这么一想会不会很傻X?会不会T啊?尼玛 连具体方法都没想好,就担心T了,,简直太低能了,后来lpt好像也在做这个比赛,她在Q上吐槽道说她刚去图书馆水过第一题后图书馆就闭馆了,然后我和她讨论了一下第二题,聊着聊着就聊到了递推,然后就她说有个词叫做离线。。。哎原来这就是离线?然后 我就开始写 ,为了能够保证到时能够倒着推过去,就用stack咯,,结果还没写完就out of submit time了,没办法交了,,,rating就这么跑了囧rz
晚上出去散了一下步之后,回来接着写那道题目,第一次t了一次,,原来我天真地用了快速幂,其实不用快速幂更快,然后答案没有设为long long 又wa 了一发,然后 乱搞了几次后就ac了
1 /********************************* 2 Author: jusonalien 3 Email : [email protected] 4 school: South China Normal University 5 Origin: 6 *********************************/ 7 #include <iostream> 8 #include <cstdio> 9 #include <map> 10 #include <cstring> 11 #include <string> 12 #include <set> 13 #include <queue> 14 #include <vector> 15 #include <stack> 16 using namespace std; 17 const int MOD = 1e9 + 7; 18 int n,m,pow; 19 stack<int> op; 20 inline int fun_1(int o){ 21 if(n&1){//ÆæÊý 22 if(o <= (n+1)/2) 23 return o*2 - 1; 24 else 25 return (o - (n+1)/2)*2; 26 }else{//żÊý 27 if(o <= n/2) 28 return o*2 - 1; 29 else 30 return (o - n/2) * 2; 31 } 32 } 33 inline int fun_2(int o){ 34 return n - o + 1; 35 } 36 inline int solve(int o,int q){ 37 if(o == 1) 38 return fun_1(q); 39 else 40 return fun_2(q); 41 } 42 int query(int o){ 43 stack<int> q = op; 44 while(!q.empty()){ 45 o = solve(q.top(),o); 46 q.pop(); 47 } 48 long long ans = o; 49 for(int i = 1;i <= pow;++i) 50 ans = (ans*ans)%MOD; 51 return ans; 52 } 53 int T; 54 int main(){ 55 n = 5; 56 char ope[3]; 57 int ope_; 58 cin>>T; 59 while(T--){ 60 pow = 0; 61 while(!op.empty()) op.pop(); 62 scanf("%d%d",&n,&m); 63 for(int i = 1;i <= m;++i){ 64 scanf("%s %d",ope,&ope_); 65 if(ope[0] == ‘O‘&&ope_ != 3) 66 op.push(ope_); 67 else if(ope[0] == ‘O‘&&ope_ == 3 ) 68 pow++; 69 else if(ope[0] == ‘Q‘) 70 cout<<query(ope_)<<endl; 71 } 72 } 73 return 0; 74 }
时间: 2024-10-27 06:24:20