题目链接:

  http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1810

题目大意:

  一个长度为N的十进制数,R(i,j)表示将第i位到第j位翻转过来后的数字,求mod 109+7

题目思路:

  【数学】

  这题换一种思路,看每个数字能够对答案的贡献情况。(可以手推01,10,001,010,100.....,也可以像我一样写个暴力打个10以内的表看看规律)

  现在先考虑位置为i的数字为1的情况(最后乘上这个数字就行)。可以发现贡献是对称的(第i位的1和第(n-i+1)的1其实换到其他位置上的次数是一样的,所以只用考虑i<=n/2的情况)

  第i位的1留在i位的情况有三种,i左边的区间交换,i右边的区间交换,以i为中心的区间交换。这些交换次数都可以通过O(1)得到。

  而i能交换到其他位置的答案也很好推,交换到第一位只有区间[1,i],交换到第二位有区间[1,i+1],[2,i],第三位.....

  可以发现交换到前i个的次数是1,2,...i-1,i,i,...,i,i,i-1,...,2,1(后一半和前一半是对称的)(从1到i,i持平,从i回到1)

  而前面和后面的递增序列对最终答案的影响可以通过预处理计算出(后面是:1+2*10+3*100...前面类似,记得带上10的幂次),而中间的持平也可以通过前缀和求出(10的幂次区间和*i)

  所以这题就可以做了。枚举每一位i,将它对答案的贡献按照上面的累加起来。

 //
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<bitset>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10000
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 100004
using namespace std;
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
LL aans;
LL e[N],sum[N],l[N],r[N];
LL a;
char s[N];
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
LL x,y;
// for(scanf("%d",&cass);cass;cass--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s))
while(~scanf("%d",&n))
{
aans=;
scanf("%s",s);
n=strlen(s);
e[n]=;e[n+]=;
for(i=n-;i;i--)e[i]=(e[i+]*)%mod;
r[n]=;r[n+]=;
for(i=n-;i+i>=n;i--)r[i]=(r[i+]+e[i]*(n-i+))%mod;
l[]=e[];l[]=;
for(i=;i+i<=n+;i++)l[i]=(l[i-]+e[i]*i)%mod;
sum[]=e[];
for(i=;i<=n;i++)sum[i]=sum[i-]+e[i]; for(i=;i<=n;i++)
{
a=s[i-]-'';
if(a==)continue;
x=i;y=n-i+;
if(x>y)swap(x,y);
aans=(aans+a*l[min(x,y)-])%mod;
aans=(aans+a*r[max(x,y)+])%mod;
aans=(aans+(a*x*(sum[y]-sum[x-]))%mod)%mod;
aans=(aans+(e[i]*a)%mod*(x*(x-)/+y*(y-)/)%mod)%mod;
}
printf("%lld\n",aans);
}
return ;
}
/*
// //
*/

【数学】CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)的更多相关文章

  1. 【最短路】【数学】CSU 1806 Toll (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1806 题目大意: N个点M条有向边,给一个时间T(2≤n≤10,1≤m≤n(n-1), ...

  2. 【最短路】【STL】CSU 1808 地铁 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1808 题目大意: N个点M条无向边(N,M<=105),每条边属于某一条地铁Ci ...

  3. 【贪心】CSU 1809 Parenthesis (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 题目大意: 给一个长度为N(N<=105)的合法括号序列.Q(Q<= ...

  4. 【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1& ...

  5. 【模拟】CSU 1807 最长上升子序列~ (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1807 题目大意: 给你一个长度为N(N<=105)的数列,数列中的0可以被其他数 ...

  6. 【树状数组】CSU 1811 Tree Intersection (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 题目大意: 一棵树,N(2<=N<=105)个节点,每个节点有一种颜 ...

  7. 【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105 ...

  8. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  9. 2016年湖南省第十二届大学生计算机程序设计竞赛Problem A 2016 找规律归类

    Problem A: 2016 Time Limit: 5 Sec  Memory Limit: 128 MB Description  给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) ...

随机推荐

  1. poj 1821 Fence 单调队列优化dp

    /* poj 1821 n*n*m 暴力*/ #include<iostream> #include<cstdio> #include<cstring> #incl ...

  2. codevs 2149 矩形周长(暴力扫描线)

    /* 暴力应该很好理解 不多说了 至于线段树维护的嘛 还没看懂 哪天突然想明白了在写吧 */ #include<iostream> #include<cstdio> #incl ...

  3. 程序从高版本降到2.0,数据集报错 TypedTableBase

    错误  命名空间“System.Data”中不存在类型或命名空间名称“TypedTableBase”(是缺少程序集引用吗?) 解决: 该错误出现在自动生成的XXX.Designer.cs里. .NET ...

  4. Member var and Static var.

    /* member variable and static variable: 1,invoke ways: member variable,also called 'instance' variab ...

  5. C#中byte[]与string的转换

    1.        System.Text.UnicodeEncoding converter = new System.Text.UnicodeEncoding();        byte[] i ...

  6. ILMerge合并程序

    在DOS窗口中,进入到ILMerge的安装目录 中 如图所示,之后写合并代码, 使用命令进行捆绑,以如图为例,将CSkin.dll和MyTool.exe捆绑成一个新的newtool.exe文件./ou ...

  7. EA创建用例图步骤详解

    EA创建用例图步骤详解 1 创建一个项目 2 选择需要的模型 3 新建模型包 4 新建图表 5 新建模型包 6 创建用户角色Actor 7 新建用例 8 关联用户和用例 9 最后整个项目浏览器目录结构 ...

  8. POJ 2186.Popular Cows (强连通)

    强连通缩点,统计入度为1的缩点后的点的个数 个数1的话输出这个强连通分量的点的数量 否则输出0: code /* Kosaraju算法,无向图的强连通分量,时间复杂度O(n+m) 思路: 按照图G的深 ...

  9. asp.net将数据导出到excel

    本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...

  10. Javascript闭包函数快速上手

    闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的. 不过我们也还是从闭包的含义出发. 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以 ...