HDU5637 bestcoder#74 Transform 题解&代码
2016-03-07 19:25
267 查看
场上没想出来…搜索直接过了就没算复杂度,愉快FST,第一次以TLE的姿态FST…我只能说pretest简直太丧病了…
因为所有步骤可以转换成为1-18位单个位转换和a[]的异或转换
所以对这些做个01背包…然后将s^t放进去(相同数的异或值是0,另外整个式子一定满足对于新的a[]存在s^a[i]^…^t=0),O(1)地得到了答案
因为所有步骤可以转换成为1-18位单个位转换和a[]的异或转换
所以对这些做个01背包…然后将s^t放进去(相同数的异或值是0,另外整个式子一定满足对于新的a[]存在s^a[i]^…^t=0),O(1)地得到了答案
#include<iostream> #include<cstdio> #include<cstring> #define MOD 1000000007 using namespace std; const int maxn=150000; int T,n,m,s,t,dp[maxn*2]; long long ans,a[40]; int main(void) { scanf("%d",&T); while(T--) { ans=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); for(int i=0;i<18;i++) a[++n]=(1<<i); for(int i=1;i<maxn;i++) dp[i]=MOD; for(int i=1;i<=n;i++) for(int j=0;j<maxn;j++) dp[a[i]^j]=min(dp[a[i]^j],dp[j]+1); for(int i=1;i<=m;i++) { scanf("%d%d",&s,&t); ans+=(long long)dp[s^t]*(long long)i; ans%=MOD; } cout<<ans<<endl; } return 0; }
相关文章推荐
- Matlab的小技巧
- C语言实现大数据除法
- python小点心--内存文件映射
- Java二维数组
- Lua.1 lua的类型与变量
- java 入门 运算符
- eclipse导入代码时中文乱码 解决方案
- C++内存布局(下)
- Java出现No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing
- 【Spring】Spring Security 相关知识学习总结
- java api如何获取kafka所有Topic列表,并放置为一个list
- Spring返回方式总结
- 运行Struts2程序时出现异常
- 解决mac OS X 下出现的 java.net.UnknownHostException 异常
- 【梦幻连连连】源代码分析(四)-触摸处理
- python 登录并爬取淘宝信息
- STM32F051 IAP源代码分享
- php魔术方法——属性重载方法
- Java线程栈的获取和分析
- 获取腾讯企业邮箱通讯录python脚本(带登录功能)