We have a tree T with n vertices and m types of ice cream numerated from 1 to m. Each vertex i has a set of si types of ice cream. Vertices which have the i-th (1 ≤ i ≤ m) type of ice cream form a connected subgraph.
指的是这个树,因为是联通图,所以必定有
A. Fake NP
给一个范围l,r
写下l到r所有整数的所有除了1以为的因子
显然,r-l<=1的时候,输出l即可,因为l也是因子之一,而2个相邻数是没有共同因子的。
当r-l>1的时候,那么2是最多写在纸上的因子,因为每2个数写1个,而对于因子k,每k个数才写1次。
B. 3-palindrome
输出一个名字要求无长度为3的回文串如aba,bab,由abc组成且最少c的数量
那么可以构造出aabbaabbaab这样的字符串,n为几就输出长度为几的字符串即可.
C. Find Amir
给出学校数量n,可以从任意起点开始旅游,问旅游完全部学校的费用,
旅游费用从i->j为(i+j)%(n+1)
那么尽可能的旅游i+j==n+1的点,找规律!!如10
1->10 消费0 从10->2 消费1 2->9 消费0 9->3消费1
3->8 消费0 8->4 消费1 4->7 消费0 7->5消费1
5->6 消费0
可以得出旅游2个免费,3个1元,4个1元,5个2元,6个2元,7个3元-- 以此类推
D. Minimum number of steps
给一个由a、b组成的字符串,所有ab子串都变成bba,每次变化行动为1次,
问把这个子串的ab变化完,需要多少次,结果mod(1e9+7)
!!找规律即可.
指的是这个树,因为是联通图,所以必定有
A. Fake NP
给一个范围l,r
写下l到r所有整数的所有除了1以为的因子
显然,r-l<=1的时候,输出l即可,因为l也是因子之一,而2个相邻数是没有共同因子的。
当r-l>1的时候,那么2是最多写在纸上的因子,因为每2个数写1个,而对于因子k,每k个数才写1次。
B. 3-palindrome
输出一个名字要求无长度为3的回文串如aba,bab,由abc组成且最少c的数量
那么可以构造出aabbaabbaab这样的字符串,n为几就输出长度为几的字符串即可.
C. Find Amir
给出学校数量n,可以从任意起点开始旅游,问旅游完全部学校的费用,
旅游费用从i->j为(i+j)%(n+1)
那么尽可能的旅游i+j==n+1的点,找规律!!如10
1->10 消费0 从10->2 消费1 2->9 消费0 9->3消费1
3->8 消费0 8->4 消费1 4->7 消费0 7->5消费1
5->6 消费0
可以得出旅游2个免费,3个1元,4个1元,5个2元,6个2元,7个3元-- 以此类推
D. Minimum number of steps
给一个由a、b组成的字符串,所有ab子串都变成bba,每次变化行动为1次,
问把这个子串的ab变化完,需要多少次,结果mod(1e9+7)
!!找规律即可.
每移动m个a到b的右边需要pow(2,m)-1次,快速幂即可
#include<iostream>
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
#include <map>
#include <set>
#include <math.h>
#include <queue>
#include <algorithm>
#include<vector>
using namespace std;
char s1[1050000];
long long pow_(long long x,long long y,long long m){
if(y==0)return 1;
long long sum1=(pow_(x,y/2,m)%m)*(pow_(x,y/2,m)%m);
if(y%2==1)sum1*=x;
return sum1%m;
}
int main(){
//freopen("in.txt","r",stdin);
int i,j,k,l1,f1,f2,f3,f4,f5,t4,t1,m;
int T;
int r1,l2,r2;
int t3,n;
cin >> s1;
l1=strlen(s1);
t1=0;
long long sum1=0;
m=1e9+7;
for(i=0;i<l1;i++){
if(s1[i]=='a'){
t1++;
}else{
sum1+=pow_(2,t1,1e9+7)-1;
sum1=sum1%(m);
}
}
cout << sum1 << endl;
}