HDOJ 5639 Transform

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5637

题意:有一个数x,你可以对x进行两种操作,1.反转x二进制其中任意一位2.x^y(y题目给出), 有n个数可以用来当y,有m组询问,每组询问两个数s,t,求

S=(∑i?zi) mod (1e9+7),其中zi是在第i次询问,通过两种操作把s变成t所需要的最小操作次数;

思路:s,t最大只有1e5相当于2^16左右,假设s^n1^n2^...^nk=t,那么转换到n1^n2^...^nk=s^t,也就是最小步数跟这两个数的异或值有关,那么预处理出所有1e5以内的异或值并且做到这个值所需要的最小步数,然后直接查询

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <string.h>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <cstdlib>
 7 using namespace std;
 8 #define P pair<int,int>
 9 const int mod=1e9+7;
10 int a[20];
11 int ans[1<<20];
12 bool flag[1<<20];
13 int n,m;
14 void  bfs(){
15     queue<pair<int,int> >q;
16     q.push(make_pair(0,0));
17     memset(flag,false,sizeof(flag));
18     flag[0]=true;
19     while(!q.empty()){
20         P tmp=q.front();
21         q.pop();
22         int x=tmp.first;
23         ans[x]=tmp.second;
24         for(int i=1;i<=n;i++){
25             if(!flag[tmp.first^a[i]]){
26                 q.push(make_pair(tmp.first^a[i],tmp.second+1));
27                 flag[tmp.first^a[i]]=true;
28             }
29         }
30         for(int i=0;i<=17;i++){
31             if(!flag[tmp.first^(1<<i)]){
32                 flag[tmp.first^(1<<i)]=true;
33                 q.push(make_pair(tmp.first^(1<<i),tmp.second+1));
34             }
35         }
36     }
37 }
38 void pre(){
39     memset(ans,0,sizeof(ans));
40     bfs();
41 }
42 void solve(){
43     long long ans_=0;
44     scanf("%d %d",&n,&m);
45     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
46     pre();
47     for(int i=1;i<=m;i++){
48         int s,t;
49         scanf("%d %d",&s,&t);
50         (ans_+=(i*ans[s^t]))%=mod;
51     }
52     printf("%lld\n",ans_);
53 }
54 int main(){
55     int T;
56     scanf("%d",&T);
57     while(T--){
58         solve();
59     }
60     return 0;
61 }
时间: 2024-12-20 22:54:39

HDOJ 5639 Transform的相关文章

HDOJ 4964 Emmet

递归语法翻译... Emmet Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 138    Accepted Submission(s): 44 Problem Description For every programmer, coding HTML & CSS is a very boring thing. For examp

stl中的transform()注意其与for_each的不同点(有无返回值)

#include<iostream> using namespace std; #include"vector" #include"algorithm" #include"list" #include"functional" // void PrintV(vector <int > &temp) { for (vector<int>::iterator it = temp.begin

trasition,transform,旋转

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> body{ margin: 100px; } .div1{ width: 200px; height: 150px; transform: rotate(30deg); background-color: ant

CSS3 transform 属性详解(skew, rotate, translate, scale)

写这篇文章是因为在一个前端QQ群里,网友 "小豆豆" (应他要求要出现他的网名......) ,问skew的角度怎么算,因为他看了很多文章还是不能理解skew的原理.于是,我觉得有必要写个博文,帮助那些不懂的人,让他们看了此文就懂. 进入正题: 先说明下,电脑屏幕的XY轴跟我们平时所说的直角坐标系是不一样的.如下图: 图上的盒子就是代表我们的电脑屏幕,原点就是屏幕的左上角,竖直向下为X轴正方向,水平向右为Y轴正方向. 1.倾斜skew 先看图 每个图下方都有skew的参数.粗的红色的线

【HDOJ】4328 Cut the cake

将原问题转化为求完全由1组成的最大子矩阵.挺经典的通过dp将n^3转化为n^2. 1 /* 4328 */ 2 #include <iostream> 3 #include <sstream> 4 #include <string> 5 #include <map> 6 #include <queue> 7 #include <set> 8 #include <stack> 9 #include <vector>

css3中的变形(transform)、过渡(transtion)、动画(animation)

Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一起来看看CSS3中transform的旋转rotate.扭曲skew.缩放scale和移动translate具体如何实现,老样子,我们就从transform的语法开始吧.是构成transtion和animation的基础. 语法: transform : none | <transform-func

css3 2D转换(2D Transform) 动画(Animation)

transform 版本:CSS3 内核类型 写法 Webkit(Chrome/Safari) -webkit-transform Gecko(Firefox) -moz-transform Presto(Opera) -o-transform Trident(IE) -ms-transform W3C transform none:无转换 matrix(<number>,<number>,<number>,<number>,<number>,&

POJ Xiangqi 4001 &amp;&amp; HDOJ 4121 Xiangqi

题目链接(POJ):http://poj.org/problem?id=4001 题目链接(HDOJ):http://acm.hdu.edu.cn/showproblem.php?pid=4121 Xiangqi Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1108   Accepted: 299 Description Xiangqi is one of the most popular two-player boa

OpenCV Tutorials &mdash;&mdash; Hough Line Transform

霍夫直线变换 -- 用于检测图像中的直线 利用图像空间和Hough参数空间的点--直线对偶性,把图像空间中的检测问题转换到参数空间,通过在参数空间进行简单的累加统计,然后在Hough参数空间中寻找累加器峰值的方法检测直线 Standard and Probabilistic Hough Line Transform OpenCV implements two kind of Hough Line Transforms: The Standard Hough Transform It consis