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 ...
随机推荐
- CSS 边框 阴影 效果
CSS 边框 阴影 效果 以下将css实现阴影效果,以便须要朋友们,直接上代码 #shadow1{ width: 200px; height: 100px; color: white; backgro ...
- TimeUnit(转)
java.util.concurrent并发库是JDK1.5新增的,其作者是Doug Lea ,此人是个BOSS级别的天才人物了.有了他提供的类库,使得我们对多线程并发.锁有了很大的帮助,减少了并发难 ...
- 如何正确合理的建立MYSQL数据库索引
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...
- 把QQ聊天记录插入数据库中
最近在做毕设,其中一个环节是分析qq聊天记录,在分析之前需要先把qq聊天记录导出,然后存入数据库中,qq聊天记录导出后是文本文档,导出方式: 1.登录qq后,点击任意一个好友,查看与他的聊天记录,点击 ...
- Crawler & Ajax:WebBrowser C#
Crawler 與 Ajax http://net.zdnet.com.cn/network_security_zone/2007/1005/536329.shtml WebBrowser: 利用We ...
- wordpress密码生成与登录密码验证
一.研究wordpress时wordpess的密码密码生成与登录密码验证方式很重要 WordPress密码已成为整合的首要目标,如何征服整合,就得了解WordPress密码算法. WordPress系 ...
- Java SE (3) 之 事件监听
package com.sun; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Demo ...
- 样式 style="clear:both"
<div style="clear:both"></div>clear:both该属性的值指出了不允许有浮动对象的边.通俗的讲:这段代码的做用是:清除同行元 ...
- Attribute 特性
转载 不错 摘要:纠结地说,这应该算是一篇关于Attribute 的笔记,其中的一些思路和代码借鉴了他人的文笔(见本文底部链接).但是,由于此文对Attribute 的讲解实在是叫好(自夸一下 ...
- EnumWindows 使用
转载自csdn:http://blog.csdn.net/hairi/article/details/548064 EnumWindows 用来列举屏幕上所有顶层窗口. MSDN原话: The E ...