葡京签到送彩金[SinGuLaRiTy] 2017 百度过的星程序设计大赛 复赛

#import <CloudKit/CloudKit.h>
// ...
CKDatabase *publicDB = [[CKContainer defaultContainer] publicCloudDatabase];

Problem Description

阳,度度熊老喜爱数字。

它们最近在学小学算术,第一不好发现这世界上竟在个别位数,三位数……甚至N位数!

只是及时反过来的算术题可并无略,由于含有表示bomb的#号,度度熊称之为
Arithmetic of Bomb。

葡京签到送彩金 1

Bomb
Number中的bomb,也就是#号,会进行一些数字,这会促成最后进行的数字超过了度度熊所能领略的层面。比如”(1)#(3)”表示”1”出现了3浅,将会让开展也”111”,

同理,”(12)#(2)4(2)#(3)”将见面吃进行也”12124222”。

以便利了解,下面为闹了Bomb Number的BNF表示。

“`

<bomb number> := <bomb term> | <bomb number> <bomb
term>

<bomb term> := <number> | ‘(‘ <number> ‘)’ ‘#’ ‘(‘
<non-zero-digit> ‘)’

<number> := <digit> | <digit> <number>

<digit> := ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ |
‘9’

<non-zero-digit> := ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’
| ‘9’

“`

告以Bomb Number中存有的#声泪俱下进行,由于数字也许怪丰富,结果对 1 000 000 007
取模。

订阅通知

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"description CONTAINS 'party'"];

    CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:@"Checkin" predicate:predicate options:CKSubscriptionOptionsFiresOnRecordCreation];

    CKNotificationInfo *info = [CKNotificationInfo new];
    info.alertLocalizationKey = @"NEW_PARTY_ALERT_KEY";
    info.soundName = @"NewAlert.aiff";
    info.shouldBadge = YES;

    subscription.notificationInfo = info;

    [publicDB saveSubscription:subscription
             completionHandler:^(CKSubscription *subscription, NSError *error) {
                 //...
             }];

收取推送通知时,在 app delegate 中处理

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    CKNotification *ckNotification = [CKNotification notificationFromRemoteNotificationDictionary:userInfo];
    if (ckNotification.notificationType == CKNotificationTypeQuery) {
        CKQueryNotification *queryNotification = ckNotification;
        CKRecordID *recordID = [queryNotification recordID];
        // ...
    }
}

现阶段苹果允许你使用 CloudKit 存储 10 GB 资源,100 M 数据库存储,每天 2 GB
流量;当你的用户数量增加的下,这些免费额度也对应地多至 1 PB 存储、10
TB 数据库存储,以及每天 200 TB 流量

WWDC 2015 中提到,CloudKit 已经 不仅 可以当 iOS 和 OS X
上用,可以以您的网站上并轨CloudKit
JS,以便
iCloud 用户可于浏览器被为会利用相应的效能,或者是使 CloudKit web
service
对 CloudKit 服务端直接开展 HTTP
请求。这意味着,现在其它运动或桌面平台都得采用 CloudKit 了!

CopyRight@Dylan. Copy@NSHipster

Arithmetic of Bomb

查询

若自己想查询名字中含有 Dylan 的

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS 'Dylan'"];
    CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Place" predicate:predicate];

    [publicDB performQuery:query
              inZoneWithID:nil
         completionHandler:^(NSArray *results, NSError *error) {
             // ...
    }];

Pokémon GO

Convenience API 顾名思义是对准 CloudKit 操作的有益 API。利用 Convenience
API 就足以本着 record 进行数量的老三种植基本操作:存储、读取、更改。
这就是说,继续全面我们的记名应用吧!开始前记得应用 CloudKit
框架并获得公开数据库的援:

Input

先是行为T,表示输入数据组数。

每组数据包含一个Bomb Expression。

– 1≤T≤100

– 1≤length(Bomb Number)≤1000

  • CKContainer
    Containers
    就像下运行的沙盒一样,一个以只能看自己沙盒中的情而非可知顾其他以之。Containers
    就是最为外层容器,每个应用来且仅来一个属自己的
    container。(事实上,经过开发者授权配置 CloudKit Dashboard
    之后,一个使用也得看其他应用的 container。)
  • CKDatabase
    Database
    即数据库,私有数据库用来储存敏感信息,比如说用户之性年龄等,用户只能看自己的民用数据库。应用也有一个当着之数据库来储存公共信息,例如你在构建一个根据地理位置签到的应用,那么地理位置信息就是该储存在公共数据库里以便所有用户都能看到。
  • CKRecord
    不怕数据库中之等同条数据记录。CloudKit 使用 record 通过 k/v
    结构来囤结构化数据。关于键值存储,目前值的架支持
    NSString、NSNumber、NSData、NSDate、CLLocation,和
    CKReference、CKAsset(这半个脚我们见面证明),以及存储以上数量列的数组。
  • CKRecordZone
    Record 不是盖散之道是吃 database 之中的,它们在 record zones
    里。每个应用都有一个 default record zone,你吗可以生从定义的 record
    zone。
  • CKRecordIdentifier
    大凡一致长条 record 的唯一标识,用于确定拖欠 record 在数据库中之绝无仅有位置。
  • CKReference
    Reference 很像 RDBMS
    中的援关系。还是坐地理位置签到应用为条例,每个地理位置好蕴涵众多用户以拖欠职务的记名,那么位置和签到之间便形成了这么平等栽含有式的专属关系。
  • CKAsset
    尽管资源文件,例如二进制文件。还是为签到用为条例,用户签到经常或者还蕴藏一摆放像,那么就张照片就是见面因为
    asset 形式储存起来。

Input

率先行为T,表示输入数据组数。
每组数据包含一个数N。
● 1≤T≤200
● 1≤length(N)≤100

    CKRecordID *greatID = [[CKRecordID alloc] initWithRecordName:@"GreatPlace"];

    [publicDB fetchRecordWithID:greatID completionHandler:^(CKRecord *fetchedPlace, NSError *error) {
         // handle errors here
    }];

Problem Description

明白,度度熊老爱图。
她最近发现了图被为是得起 valley —— 山谷的,像下就张图。

葡京签到送彩金 2

为了形成山谷,首先要以一个贪图的极限标记为高点或者低点。标记就后若一个极端三元组<X,
Y,
Z>中,X和Y之间有边,Y与Z之间为起限度,同时X和Z是高点,Y是小点,那么其就是整合一个valley。
度度熊想了解一个无论是为图备受极多好组成多少个valley,一个终极最多只能出现于一个valley中。

不当情况

Input

首先行为T,表示输入数据组数。
每组数据包含一个Bomb Expression。
●1≤T≤50
●1≤length(Bomb Statement)≤10
●1≤length(Number in Bomb term)≤10
●1≤length(Bomb Expression)≤300 000

脚,新建一个职信息并蕴藏
坐 CloudKit 在异步运行 saveRecord:completionHandler:
时常见面使用网络及服务器交互,网络状况是勿自然的,所以 一定 记得使于 block
中处理错误,一个吓的使用该有完善之错误处理机制。
公得检查 NSError
对象来确定在处理啊种错误。例如,无网络线连接的时节会触发CKErrorNetworkUnavailable
类型的错,然后你用举行的就是是败后重试。等等,那么只要什么时候重试呢?立刻,还是十秒之后?别担心,CloudKit
在 error 的 userInfo 字典中提供了一个提议之重试时间 CKErrorRetryAfterKey

Valley Numer

CloudKit 的根基对象类型有 7
种。这些目标类型或者与你当旁编程领域了解之类似对象类型稍有差距。

Code

目测几哪里神犇题,发现好写图找规律……第一破覆盖一定有在轨道的前面8截被。

#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<cstdlib>

#define MAXN 1000010

using namespace std;

const int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int N,a[MAXN];

struct Point
{
    int x,y;
    Point(int _x=0,int _y=0):x(_x),y(_y){}
}points[MAXN];

bool overlap(int a,int b,int c,int d)
{
    if(a>b)
        swap(a, b);
    if(c>d)
        swap(c, d);
    return !(b<c||d<a);
}

bool intersect(Point a1,Point a2,Point b1,Point b2)
{
    bool is_vertical_a=(a1.x==a2.x),is_vertical_b=(b1.x==b2.x);
    if(is_vertical_a && is_vertical_b)
        return a1.x==b1.x&&overlap(a1.y,a2.y,b1.y,b2.y);
    if(!is_vertical_a && !is_vertical_b)
        return a1.y==b1.y&&overlap(a1.x,a2.x,b1.x,b2.x);
    if(is_vertical_a)
    {
        swap(a1,b1);
        swap(a2,b2);
    }
    return !(max(a1.x,a2.x)<b1.x||min(a1.x,a2.x)>b1.x||max(b1.y,b2.y)<a1.y||min(b1.y,b2.y)>a1.y);
}

int solve()
{
    int x=0,y=0;
    for(int i=0;i<N;++i)
    {
        x+=dx[i&3]*a[i];
        y+=dy[i&3]*a[i];
        points[i+1].x=x;
        points[i+1].y=y;
        for(int j=max(0,i-8);j<i-2;++j)
            if(intersect(points[j],points[j+1],points[i],points[i+1]))
                return i;
    }
    return -1;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d",&N);
        for(int i=0;i<N;++i)
            scanf("%d",a+i);
        int result=solve();
        if(result==-1)
            printf("Catch you\n");
        else
            printf("%d\n", result+1);
    }
    return 0;
}
    CKRecordID *markID = [[CKRecordID alloc] initWithRecordName:@"mark"];

    CKRecord *place = [[CKRecord alloc] initWithRecordType:@"Place" recordID:markID];

    [publicDB saveRecord:place completionHandler:^(CKRecord *savedPlace, NSError *error) {

        if (!error) {

            NSLog(@"[success]\n keys: %@\n type: %@\n rName: %@", savedPlace.changedKeys, savedPlace.recordType, savedPlace.recordID.recordName);
        } else {

            NSLog(@"[error]\n info:%@", error.userInfo);

            double retryAfterValue = [error.userInfo[CKErrorRetryAfterKey] doubleValue];
            NSDate *retryAfterDate = [NSDate dateWithTimeIntervalSinceNow:retryAfterValue];

            NSLog(@"[retrydata]\n %@", retryAfterDate);
        }
    }];

Code

动态规划

#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<cstring>

#define ll long long
const int maxn=10010,MOD=1000000007;

ll a[maxn],b[maxn],n;

int main()
{
    b[1]=1;
    for(int i=2;i<=maxn;i++)
        b[i]=(b[i-1]*2)%MOD;
    a[1]=1;
    a[2]=6;
    for(int i=3;i<=maxn;i++)
        a[i]=(2*a[i-1]+b[i]+4*a[i-2])%MOD;
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        ll ans=0;
        for(int i=2;i<=n-1;i++)
            ans=(ans+16*b[i-1]%MOD*a[n-i])%MOD;
        ans=(ans+4*a[n])%MOD;
        if(n==1)
            ans=2;
        printf("%lld\n",ans);
    }
    return 0;
}

双重改一个业已有的岗位信息

Output

本着每组数据输出最多能结合的valley数目。

下面,获取一个职信息

【SinGuLaRiTy-1038】 Copyright (c) SinGuLaRiTy 2017. All Rights
Reserved.

    CKRecordID *greatID = [[CKRecordID alloc] initWithRecordName:@"GreatPlace"];

    [publicDB fetchRecordWithID:greatID completionHandler:^(CKRecord *fetchedPlace, NSError *error) {
        if (fetchedPlace != nil) {
            NSString *name = fetchedPlace[@"name"];
            fetchedPlace[@"name"] = [name stringByAppendingString:@" Door A"];

            [publicDB saveRecord:fetchedPlace completionHandler:^(CKRecord *savedPlace, NSError *savedError) {
                //...
            }];
        } else {
            // handle errors here
        }
    }];

Code

记忆化搜索/数个DP

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
#define ll long long
using namespace std;
const ll maxn=110,MOD=1000000007;
ll f[maxn][2][10],a[maxn],n;
char s[maxn];

ll dfs(ll pos,ll state,ll limit,ll pre)
{
    if(pos==-1)
    {
        if(~pre)
            return 1;
        else
            return 0;
    }
    if(!limit&&~pre&&~f[pos][state][pre])
        return f[pos][state][pre];
    ll up=limit?a[pos]:9;
    ll ans=0;
    for(int i=0;i<=up;i++)
    {
        if(pre==-1&&i==0)
            ans=(ans+dfs(pos-1,state,limit&&i==up,pre))%MOD;
        else if(pre==-1&&i!=0)
            ans=(ans+dfs(pos-1,state,limit&&i==up,i))%MOD;
        else if(state==0)
            ans=(ans+dfs(pos-1,i>pre,limit&&i==up,i))%MOD;
        else if(state==1&&i>=pre)
            ans=(ans+dfs(pos-1,state,limit&&i==up,i))%MOD;
    }
    if(!limit&&~pre)
        f[pos][state][pre]=ans;
    return ans;
}

int main()
{
    ll T;
    scanf("%lld",&T);
    memset(f,-1,sizeof(f));
    while(T--)
    {
        scanf("%s",s+1);
        n=strlen(s+1);
        for(int i=1;i<=n;i++)
            a[n-i]=s[i]-'0';
        printf("%lld\n",dfs(n-1,0,1,-1));
    }
    return 0;
}

Input

先是行为T,表示输入数据组数。
每组数据包含一个数N。
●1≤T≤100
●1≤N≤10000

Sample Input

3
1
2
3

Sample Input

3
4
2 2 2 2
4
2 1 3 1
5
2 1 3 1 3

Code

状压DP

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>

#define ll long long

using namespace std;

int read()
{
    char c;int s=0,t=1;
    while(!isdigit(c=getchar()))if(c=='-')t=-1;
    do{s=s*10+c-'0';}while(isdigit(c=getchar()));
    return s*t;
}

const int inf=0x3f3f3f3f,maxn=40,maxk=80010;

int n,f[2][maxk],c,k,m,hi[maxn];
bool Map[maxn][maxn],high[maxn];

void dfs(int dep,int now,int pre,int cyc,int x)
{
    if(dep==3)
        f[now][c]=max(f[now][c],f[pre][cyc]+1);
    else
        for(int i=0;i<=k-1;i++)
            if(Map[x][hi[i+1]]&&!(c&(1<<i)))
            {
                c|=(1<<i);
                dfs(dep+1,now,pre,cyc,x);
                c^=(1<<i);
            }
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        n=read();m=read();k=read();
        int u,v;
        memset(Map,0,sizeof(Map));
        for(int i=1;i<=m;i++)
        {
            u=read();v=read();
            Map[u][v]=Map[v][u]=1;
        }
        memset(high,0,sizeof(high));
        for(int i=1;i<=k;i++)
        {
            u=read();
            high[u]=1;
        }
        int nowk=0;
        for(int i=1;i<=n;i++)if(high[i])hi[++nowk]=i;
        k=nowk;
        memset(f,0,sizeof(f));
        int x=1;
        for(int i=1;i<=n;i++)if(!high[i])
        {
            x=1-x;
            memset(f[x],0,sizeof(f[x]));
            for(int j=0;j<(1<<k);j++)
            {
                f[x][j]=max(f[x][j],f[1-x][j]);
                c=j;
                dfs(1,x,1-x,j,i);
            }
        }
        int ans=0;
        for(int i=0;i<(1<<k);i++)ans=max(ans,f[x][i]);
        printf("%d\n",ans);
    }
    return 0;
}

 

Time: 2017-08-24

Problem Description

明显,度度熊老喜爱数字。
它们最近表明了平栽新的数字:Valley Number,像山谷一样的数字。

葡京签到送彩金 3

当一个数字,从左到右依次看千古数字尚未起先递增接着递减的“山峰”现象,就深受称之为
Valley
Number。它可以递增,也得递减,还足以先递减再递增。在递增或递减的历程被好出现相等的状。
比如,1,10,12,212,32122都是 Valley Number。
121,12331,21212则不是。
度度熊想了解不浮N的Valley Number数有微。
专注,前导0是免合法的。

Problem Descroption

一目了然,度度熊大好数字。
它最近于念书小学算术,沉迷于计算A+B中败坏。
唯独及时反过来之算术题可连无略,由于含有表示bomb的#声泪俱下,度度熊称之为
Arithmetic of Bomb。

葡京签到送彩金 4

Arithmetic of Bomb的目的及平常算术一样,就是算一些Bomb
Expression的结果。比如,”1-2+3”的结果为2。然而,bomb,也就是#号,会进展一些不足为奇表达式,这会促成急需计算的架子超出了度度熊所能懂的范围。比如”(1-2+3)#(3)”表示”1-2+3”出现了3蹩脚,将会晤为开展也”1-2+31-2+31-2+3”。
为有利于清楚,下面让起了Bomb Expression的BNF表示。
“`
<bomb expression> := <bomb term> | <bomb expression>
<bomb term>
<bomb term> := <bomb statement> | ‘(‘ <bomb statement>
‘)’ ‘#’ ‘(‘ <number> ‘)’
<bomb statement> := <bomb element> | <bomb statement>
<bomb element>
<bomb element> := <digit> | ‘+’ | ‘-‘ | ‘*’
<normal expression> := <norm term> | <normal
expression> ‘+’ <norm term> | <normal expression> ‘-‘
<norm term>
<norm term> := <number> | <norm term> ‘*’
<number>
<number> := <digit> | <non-zero-digit>
<number>
<digit> := ‘0’ | <non-zero-digit>
<non-zero-digit> := ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’
| ‘9’
“`
要预将Bomb Expression中保有的#声泪俱下进行,使该变成Normal
Expression(题目的输入保证展开后是一个官方的Normal
Expression),再来计算这表达式的结果。

Output

本着每组数据输出表达式的结果,结果对 1 000 000 007 取模。

Sample Output

1
0
2

Sample Input

2
24
96

Input

先是行为T,表示输入数据组数。
每组数据的率先尽包含一个数N,表示指令长度。接着的同行包含N个数字Xi,表示第i单指令中前进之距离。
● 1≤T≤100
● 1≤N≤1 000 000
● 1≤Xi≤1 000 000 000

Pokémon GO II

Sample Input

3
3
14
120

Sample Input

4

1

(1)#(3)

(12)#(2)4(2)#(3)

(12)#(5)

Output

本着每组数据输出表达式的结果,结果对 1 000 000 007 取模。

Input

首先行为T,表示输入数据组数。
每组数据的首先执包含三个整数N,M,K,分别表示顶点个数,边的个数,标记为高点的顶点个数。
随之的M行,每行包含两单鲜单整数Xi,Yi,表示一致条无为度。
最后一履包含K个整数Vi,表示这些点给记为高点,其他接触虽然还为低点。
● 1≤T≤20
● 1≤N≤30
● 1≤M≤N*(N-1)/2
● 0≤K≤min(N,15)
● 1≤Xi, Yi≤N, Xi!=Yi
● 1≤Vi≤N

Problem Description

分明,度度熊以来迷恋于 Pokémon GO。

葡京签到送彩金 5

今她控制使抓住所有的精灵球!
为不为度度熊失望,精灵球已经深受优先停放在一个2*N的格子上,每一个格子上都产生一个精灵球。度度熊可以择随机一个格子开始玩,抓捕格子上的精灵球,然后倒至一个附近之足足发生一个公共点的格子上前仆后继追捕。例如,(2,
2) 的附近格子有(1, 1), (2, 1) 和 (1, 2) 等等。
今度度熊要知晓用所有精灵球都逮及以步数最少之方案数目。两单方案被看是殊,当且仅当半只方案至少发生一致步所于的格子是见仁见智之。

Code

如法炮制,签到开不讲。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>

#define ll long long
#define inf 0x3f3f3f3f
#define maxn 101000
#define MOD 1000000007

using namespace std;

int read()
{
    char c;int s=0,t=1;
    while(!isdigit(c=getchar()))if(c=='-')t=-1;
    do{s=s*10+c-'0';}while(isdigit(c=getchar()));
    return s*t;
}

int n;
char s[maxn],ans[maxn],nows[maxn];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",s+1);
        int n=strlen(s+1);
        int nowstep=0,len=0,tot=0;
        for(int i=1;i<=n;i++)if(isdigit(s[i]))
        {
            if(nowstep==1){nows[++len]=s[i];}
            else 
                if(nowstep==2)
                {
                    for(int j=1;j<=s[i]-'0';j++)
                        for(int k=1;k<=len;k++)
                            ans[++tot]=nows[k];
                    len=0;nowstep=0;
                }
                else
                    if(nowstep==0)ans[++tot]=s[i];
        }
        else
        {
            if(nowstep==0&&s[i]=='(')
                nowstep=1;
            else if(nowstep==1&&s[i]==')')
                nowstep=2;
        }
        long long ansnum=0;
        for(int i=1;i<=tot;i++)
            ansnum=(ansnum*10+ans[i]-'0')%MOD;
        printf("%lld\n",ansnum);
    }
    return 0;
}

Code

自身还非见面矩阵运算呀,只好先以此放平放大牛的代码了(能做出这道题的确佩服!)

【本题题解来自于:y5zsq】

葡京签到送彩金 6

Arithmetic of Bomb II

Output

针对每组数据输出方案数目,结果对 1 000 000 007 取模。

Problem Description

妇孺皆知,度度熊以来痴迷于 Pokémon GO。

葡京签到送彩金 7

由于最为过迷,现在它只能按照游戏内置的命行走了:对,简直就是如一个切实可行中之Pokémon!
游玩内置的指令实际上可以抽象成一种植:保持现在的向前行X米,然后右改。度度熊相信,只要按这令,它便定可以抓到绝难能可贵的精灵球。
只是不幸之凡,这个命令并无是颇有可信度,有时会带度度熊走回原来的职。现在她想清楚,在第几漫长指令时其首先不行回已经走过的职位?如果这种景象并未有,请输出
“Catch you”。

Output

本着每组数据输出不盖N的Valley Number个数,结果对 1 000 000 007 取模。

Sample Input

葡京签到送彩金 8葡京签到送彩金 9

3
3 2 2
1 2
1 3
2 3
3 2 2
1 2
1 3
1 2
7 6 5
1 2
1 3
1 4
2 3
2 6
2 7
3 4 5 6 7

View Sample Input

Valley Numer II

Sample Input

6
1-2+3
(1-2+3)#(3)
(1)#(3)
(1+)#(2)1
(2*3+1)#(2)
(2)#(2)1+1(2)#(2)

Sample Input

3

14

119

Sample Output

2
60
111
3
43
343

Sample Output

4
Catch you
5

Code

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
#define maxn 300005
#define mod 1000000007
vector<string>term;
vector<ll>num;
char c[maxn]; 
int T;
void Deal()
{
    term.clear(),num.clear();
    int n=strlen(c);
    for(int i=0;i<n;)
    {
        string s;
        if(c[i]=='(')
        {
            i++;
            while(c[i]!=')')s.push_back(c[i++]);
            i+=3;
            ll t=0;
            while(c[i]!=')')t=t*10+c[i++]-'0';
            if(t)term.push_back(s),num.push_back(t);
            i++;
        }
        else
        {
            while(i<n&&c[i]!='(')s.push_back(c[i++]);
            term.push_back(s),num.push_back(1);
        }
    }
}
typedef ll Mat[4][4];
Mat A,B,C;
void Mul(Mat &a,Mat b)
{
    Mat c;
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
        {
            c[i][j]=0;
            for(int k=0;k<4;k++)
                c[i][j]+=a[i][k]*b[k][j];
        }
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            a[i][j]=(c[i][j]%mod+mod)%mod;
}
void Pow(Mat &a,ll b)
{
    if(b==1)return ;
    Mat c;
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            c[i][j]=(i==j);
    while(b)
    {
        if(b&1)Mul(c,a);
        Mul(a,a);
        b>>=1;
    }
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            a[i][j]=c[i][j];
}
ll Count()
{
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            A[i][j]=(i==j);
    int sign=1;
    for(int k=0;k<term.size();k++)
    {
        string s=term[k];
        ll t=num[k];
        int n=s.size();
        for(int i=0;i<4;i++)
            for(int j=0;j<4;j++)
                B[i][j]=(i==j);
        for(int i=0;i<n;i++)
        {
            memset(C,0,sizeof(C));
            C[0][0]=C[3][3]=1;
            if(s[i]>='0'&&s[i]<='9')
                C[1][1]=10,C[2][1]=s[i]-'0',C[2][2]=1;
            else if(s[i]=='+')
                C[1][0]=sign,C[3][2]=1,sign=1;
            else if(s[i]=='-')
                C[1][0]=sign,C[3][2]=1,sign=-1;
            else C[1][2]=1;
            Mul(B,C); 
        }
        Mul(A,B);
        if(t>1)
        {
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    B[i][j]=(i==j);
            for(int i=0;i<n;i++)
            {
                memset(C,0,sizeof(C));
                C[0][0]=C[3][3]=1;
                if(s[i]>='0'&&s[i]<='9')
                    C[1][1]=10,C[2][1]=s[i]-'0',C[2][2]=1;
                else if(s[i]=='+')
                    C[1][0]=sign,C[3][2]=1,sign=1;
                else if(s[i]=='-')
                    C[1][0]=sign,C[3][2]=1,sign=-1;
                else C[1][2]=1;
                Mul(B,C); 
            }
            Pow(B,t-1);
            Mul(A,B);
        }
    }
    ll ans=(A[2][0]+A[3][0])%mod;
    if(sign==1)ans=(ans+A[2][1]+A[3][1])%mod;
    else ans=(ans-A[2][1]-A[3][1])%mod;
    ans=(ans+mod)%mod;
    return ans;
}
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",c);
        Deal();
        printf("%I64d\n",Count()); 
    }
    return 0;
}

Sample Output

1

111

12124222

212121205

Output

本着每组数据输出第一不成回到已经走过的位置时的吩咐下标i (1≤i≤N)。
只要这种景象并未生出,请输出 “Catch you”。