Codeforces H. Malek Dance Club(找规律)
题目描述:
Malek Dance Club
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
As a tradition, every year before IOI all the members of Natalia Fan Club are invited to Malek Dance Club to have a fun night together. Malek Dance Club has 2n members and coincidentally Natalia Fan Club also has 2n members. Each member of MDC is assigned a unique id i from 0 to 2n - 1. The same holds for each member of NFC.
One of the parts of this tradition is one by one dance, where each member of MDC dances with a member of NFC. A dance pair is a pair of numbers (a, b) such that member a from MDC dances with member b from NFC.
The complexity of a pairs' assignment is the number of pairs of dancing pairs (a, b) and (c, d) such that a < c and b > d.
You are given a binary number of length n named x. We know that member i from MDC dances with member
from NFC. Your task is to calculate the complexity of this assignment modulo 1000000007 (109 + 7).
Expression
denotes applying «XOR» to numbers x and y. This operation exists in all modern programming languages, for example, in C++ and Java it denotes as «^», in Pascal — «xor».
Input
The first line of input contains a binary number x of lenght n, (1 ≤ n ≤ 100).
This number may contain leading zeros.
Output
Print the complexity of the given dance assignent modulo 1000000007 (109 + 7).
Examples
Input
Copy
11
Output
Copy
6
Input
Copy
01
Output
Copy
2
Input
Copy
1
Output
Copy
1
思路:
题目意思是给一个长度为n的01字符串x,然后将0到n-1的数与x做亦或,映射到另一组数,求这个形成的键值对的复杂度,根据复杂度定义,我们知道(a,b)与(c,d),当a<c&&b>d时算一个复杂度,由于我们是从小到大枚举键的,满足复杂度的第一个条件,只要再满足值是逆序的就可以了,题目就转换成了求有多少个逆序对。
我们可以来找一下规律:
n=3时,有
x=000
000=>000
001=>001
...
111=>111,值的逆序对为0,所以复杂度为零
x=001
000=>011
001=>000
010=>011
011=>010
...
111=>110,值的逆序对有4个,所以复杂度是四
以此类推,最终得到:\(a_0=0,a_1=4,a_2=8,...,a_7=28\),即\(a_x=4x\).
同理,n=2时有\(a_x=2x\).最后有:\(a_x=2^{n-1}x\).
由于是大数,需要用到快速幂和及时取余。
代码:
#include <iostream>
#include <string>
#define m 1000000007
using namespace std;
int n;
string s;
long long convert(string s)
{
long long ans = 0;
long long weight = 1;
for(int i = s.size()-1;i>=0;i--)
{
if(s[i]=='1')
{
ans = (ans+weight)%m;
}
weight = (weight%m*2)%m;
}
return ans;
}
long long q_mod(long long a,long long b,long long mod)
{
long long sum = 1;
while(b)
{
if(b&1)
{
sum = (sum%mod*a%mod)%mod;
}
a = (a%mod*a%mod)%mod;
b >>= 1;
}
return sum;
}
int main()
{
//cout << q_mod(2,3,m) << endl;
cin >> s;
n = s.size();
long long ans = convert(s);
ans = (ans%m*q_mod(2,n-1,m))%m;
cout << ans << endl;
}
Codeforces H. Malek Dance Club(找规律)的更多相关文章
- Malek Dance Club(递推)
Malek Dance Club time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- codeforces B. A and B 找规律
Educational Codeforces Round 78 (Rated for Div. 2) 1278B - 6 B. A and B time limit per test 1 secon ...
- Codeforces 870C Maximum splitting (贪心+找规律)
<题目链接> 题目大意: 给定数字n,让你将其分成合数相加的形式,问你最多能够将其分成几个合数相加. 解题分析: 因为要将其分成合数相加的个数最多,所以自然是尽可能地将其分成尽可能小的合数 ...
- Codeforces Gym 100015B Ball Painting 找规律
Ball Painting 题目连接: http://codeforces.com/gym/100015/attachments Description There are 2N white ball ...
- Codeforces 603A - Alternative Thinking - [字符串找规律]
题目链接:http://codeforces.com/problemset/problem/603/A 题意: 给定一个 $01$ 串,我们“交替子序列”为这个串的一个不连续子序列,它满足任意的两个相 ...
- Codeforces Gym 100637B B. Lunch 找规律
B. Lunch Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100637/problem/B Des ...
- Codeforces 474D Flowers (线性dp 找规律)
D. Flowers time limit per test:1.5 seconds memory limit per test:256 megabytes We saw the little gam ...
- codeforces D. Queue 找规律+递推
题目链接: http://codeforces.com/problemset/problem/353/D?mobile=true H. Queue time limit per test 1 seco ...
- Codeforces D. Little Elephant and Interval(思维找规律数位dp)
题目描述: Little Elephant and Interval time limit per test 2 seconds memory limit per test 256 megabytes ...
随机推荐
- git worktree 目录修复
三种方式挨个尝试,1不行用2 2不行用3 1.拉取阶段失败 git worktree add -f -B xxx_branch ./xxx_branch origin/xxx_branch 强制拉取 ...
- JS系列:函数function
### 函数 function > 在js中函数就是一个方法(一个功能体)基于这个函数,一般是为了实现某个功能. ``` var total =10; total+=10; total=tota ...
- 微信JS从1.0.0升级到1.1.2的一个坑
因为1.0.0不支持电脑端日期Picker滚动,升级成了1.1.2,结果发现日期选择不起作用了经过跟踪发现 通过控制台查看 resut[1].toString()居然是number类型,修改代码为() ...
- JFR 使用记录
进程的内存信息,可以使用jmap 和 jstack 等dump出文件,使用jhat 分析 dump 文件.不过比较简陋. 可以不停进程的方式有 JFR 或者taobao 开源组件. 本篇只记录JFR相 ...
- MyISAM 和 InnoDB 索引的区别
阅读目录 一 MyISAM索引实现 二 InnoDB索引实现 三 InnoDB索引和MyISAM索引的区别 回到顶部 一 MyISAM索引实现 1. 主键索引 MyISAM引擎使用B+树作为索引结 ...
- IDEA界面太丑??尝试一下这几个风格
>>>>>>>>>>原文地址<<<<<<<<<< >>>> ...
- 56 容器(十)——Iterator迭代器遍历容器
迭代器的获取 LIst与Set容器统一使用他们的对象.Iterator()方法获得迭代器对象,然后使用while循环配合迭代器的方法hasNext()及next()来遍历容器. List<Str ...
- day54——jquery补充、bootstrap
day54 jquery 页面载入 window.onload: 原生js的window.onload事件:// onload 等待页面所有内容加载完成之后自动触发的事件 window.onload ...
- Java Annontation 注解的学习和理解
/** * <html> * <body> * <P> Copyright 1994 JsonInternational</p> * <p> ...
- 如何获取图片上传OSS后的缩略图 超简单
OSS是使用通过URL尾部的参数指定图片的缩放大小 图片路径后面拼接如下路径: ?x-oss-process=image/[处理类型],x_100,y_50[宽高等参数] ?x-oss-pro ...