Contest 20140708 testA && testC
testA
输入文件: testA.in 输出文件testA.out 时限2000ms
问题描述:
如果一个数化为一个二进制数之后(没有前导0),0的个数>=1的个数。那么这个数就是方数。
Eg.(12) = (1100) 2个1和2个0 所以12是一个方数。
(6)=(110) 2个1和1个0所以6不是一个方数。
现在方老师想知道区间[L,R]里有多少个方数。
输入描述:
一共一行L和R。(1<=L<=R<=2*10^9)
输出描述:
一个数表示[L,R]里有多少个方数。
数据范围 N<=200 , W<=100000 , M<=19900
样例输入:
2 12
样例输出:
6
这道题正解是用组合数算。但是明显数位DP要简单得多。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
#define MAXN 1000000
#define PROB "testA"
int ans1[MAXN];
int work1()
{
//freopen(PROB".in","r",stdin);
//freopen(PROB".out","w",stdout);
int ans=;
int x,t0,t1;
int i;
for (i=;i<MAXN;i++)
{
x=i;
t0=t1=;
//cout<<i<<":";
while (x)
{
if (x&)
{
// cout<<"1";
t1++;
}else
{
// cout<<"0";
t0++;
}
x>>=;
}
//cout<<endl;
if (t0>=t1)
{
ans++;
/* x=i;
t0=t1=0;
cout<<i<<":";
while (x)
{
if (x&1)
{
cout<<"1";
t1++;
}else
{
cout<<"0";
t0++;
}
x>>=1;
}
cout<<endl;*/
}
//printf("%d %d\n",i,ans);
ans1[i]=ans;
}
}
bool num[];
int rec[];
int topn;
int dp[][];
bool vis[][];
int solve(int now,int mr,int ov)//mr=t0-t1
{
if (ov&&vis[now][mr+])
{
return dp[now][mr+];
}
int ret=;
if (now==-)
{
if (mr>=)
{
/* for (int i=topn;i>=0;i--)
{
cout<<rec[i];
}
cout<<endl;*/
}
return mr>=;
}
if (ov)
{
rec[now]=;
ret+=solve(now-,mr+,true);
rec[now]=;
ret+=solve(now-,mr-,true);
vis[now][mr+]=;
return dp[now][mr+]=ret;
}else
{
if (num[now]==)
{
rec[now]=;
ret+=solve(now-,mr+,true);
rec[now]=;
ret+=solve(now-,mr-,false);
}else
{
rec[now]=;
ret+=solve(now-,mr+,false);
}
return ret;
}
}
int work2(int x)
{
int i;
if (x==)return ;
topn=-;
memset(dp,,sizeof(dp));
memset(vis,,sizeof(vis));
while (x)
{
num[++topn]=x&;
x>>=;
}
int ans=;
rec[topn]=;
ans+=solve(topn-,-,);
rec[topn]=;
for (i=topn-;i>=;i--)
{
rec[i+]=;
rec[i+]=;
ans+=solve(i,-,);
}
return ans+;
}
int main()
{
freopen(PROB".in","r",stdin);
freopen(PROB".out","w",stdout);
int i; int l,r;
scanf("%d%d",&l,&r);
int ans;
ans=work2(r)-work2(l-);
cout<<ans<<endl;
}
testC
输入文件: testC.in 输出文件testC.out 时限1000ms
问题描述:
给定一个n*m的国际象棋棋盘(左上角那个格子是黑的),方老师在第0时刻我们把所有的黑色格子全部重新涂成0号颜色,在第i个时刻方老师会把一些点(如果4个和他有恰好有一个公共顶点的格子都涂上的是i-1号颜色)重新涂成i号颜色(这种循环会无限进行下去,而且每次重新涂颜色是同时进行的)。最后问有多少个格子恰好被重新涂了x次。
输入描述:
一行三个数n,m,x。(1<=n,m<=5000,x<=10^9)
输出描述:
一个数表示有多少个格子被重新涂了x次
样例输入:
3 3
1
样例输出:
4
这道题主要是要联系生活,如果没有发现国际象棋棋盘是那种白黑间隔着的。那这道题就真的不可做了。
另外,考虑要全面。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 1000
#define VAL1 100009
#define PROB "testC"
#define min(x,y) (((x)<(y))?(x):(y))
int n,m; int main()
{
freopen(PROB".in","r",stdin);
freopen(PROB".out","w",stdout);
int x;
scanf("%d%d%d",&n,&m,&x);
if (x=0)
{
printf("%d\n",m*n/2);
return 0;
}
if (n==1||n==2||m==1||m==2)
{
printf("0\n");
return 0;
}
n-=(x-1)*2;
m-=(x-1)*2;
printf("%d\n",max(0,(n+m-2)));
}
Contest 20140708 testA && testC的更多相关文章
- Contest 20140708 testB dp 组合数
testB 输入文件: testB.in 输出文件testB.out 时限3000ms 问题描述: 定义这样一个序列(a1,b1),(a2,b2),…,(ak,bk)如果这个序列是方序列的话必须满足 ...
- IOS开发基础知识--碎片3
十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...
- lua实现深度拷贝table表
lua当变量作为函数的参数进行传递时,类似的也是boolean,string,number类型的变量进行值传递.而table,function,userdata类型的变量进行引用传递.故而当table ...
- Linux系统文件访问控制列表
linux系统中的RWX权限.特殊权限.隐藏权限都是对某一类用户设置的, 而如果希望对某个指定的用户进行单独的权限设置的话就需要用到文件的 访问控制权限了. 我们可以对普通文件或目录进行设置ACL,通 ...
- Linux命令-sudo
sudo命令用于给普通用户提供额外权利来完成原本只有超级用户才有权限完成的任务, 格式:sudo [参数] 命令名称 sudo命令与su命令的区别是,su命令允许普通用户完全变更为超级管理员的身份,但 ...
- 两个对象值转换的方法(BeanUtils.copyProperties与JSONObject.parseObject对比)
将源对象赋值到目标对象方法: 方法一:BeanUtils.copyProperties(源对象, 目标对象); //org.springframework.beans.BeanUtils 方法二:目标 ...
- Linux命令学习-cp命令
Linux中,cp命令的全称是copy,主要作用是复制文件或文件夹,类似于Windows下的复制功能. 假设当前处于wintest用户的主目录,路径为 /home/wintest ,存在文件夹test ...
- 由AnnotatedElementUtils延伸的一些所思所想
这篇博客的两个主题: spring的AnnotatedElementUtils 个人源码阅读方法论分享 为什么要分享AnnotatedElementUtils这个类呢,这个类看起来就是一个工具类,听起 ...
- Programming Contest Problem Types
Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...
随机推荐
- resin 4.0数据源的配置
在resin 的conf 文件下有resin.xml 我们在这里能够配置数据源以及配置项目 一.配置多个数据源,多个项目共享这些数据源.也就是这些数据源配置在<host> </ ...
- careercup-链表 2.1
2.1 编写代码,移除未排序链表中的重复节点. 不使用临时缓存: 如果不允许使用临时的缓存(即不能使用额外的存储空间),那需要两个指针, 当第一个指针指向某个元素时,第二个指针把该元素后面与它相同的元 ...
- 高效 jquery 的奥秘
当你准备使用 jQuery,我强烈建议你遵循下面这些指南: 1. 缓存变量 DOM 遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $( ...
- CentOS7安装Cobbler
安装EPEL源 # rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 安装cobbler ...
- 【原创教程】虎咽CSS
上节课我们讲了HTML基础,回顾的事我不干了,因为你可以回头看很多遍,这节课我们来学习下CSS这门艺术的基础知识,一直以来我们都是CSS,CSS那么CSS到底是什么呢,惯例,我又来一层一层把CSS ...
- Ubuntu安装gevent
今天在安装包的过程中,按照网上的文章,出错,找了很久,最后才安装成功,希望能解决以后大家遇到的问题 Ubuntu安装gevent Gevent是一个基于greenlet的Python的并发框架,以赖于 ...
- .NET设计模式(10):装饰模式(Decorator Pattern)
.NET设计模式(10):装饰模式(Decorator Pattern) 装饰模式(Decorator Pattern) --.NET设计模式系列之十 年月..在....对于..由于使用装饰模 ...
- oracle数据库误删恢复方法
一.如果只是误删部分数据或者某条数据可以通过 1.select * from 误删除的表明 as of timestamp to_Date('恢复年月日 时分秒', '恢复时间格式') ...
- Jsp的九个隐含对象
JSP的9个隐含对象(内置对象) 不需要预先声明,就可以在jsp或者表达式中随意使用 out javax.servlet.jsp.JspWriter类型,代表输出流的对象.作业域:页面的执行期. re ...
- (三)Struts2 拦截器
所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:拦截器简介 (百度百科Struts2) Struts2 拦截器是在访问某 ...