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的更多相关文章

  1. Contest 20140708 testB dp 组合数

    testB 输入文件: testB.in  输出文件testB.out 时限3000ms 问题描述: 定义这样一个序列(a1,b1),(a2,b2),…,(ak,bk)如果这个序列是方序列的话必须满足 ...

  2. IOS开发基础知识--碎片3

    十二:判断设备 //设备名称 return [UIDevice currentDevice].name; //设备型号,只可得到是何设备,无法得到是第几代设备 return [UIDevice cur ...

  3. lua实现深度拷贝table表

    lua当变量作为函数的参数进行传递时,类似的也是boolean,string,number类型的变量进行值传递.而table,function,userdata类型的变量进行引用传递.故而当table ...

  4. Linux系统文件访问控制列表

    linux系统中的RWX权限.特殊权限.隐藏权限都是对某一类用户设置的, 而如果希望对某个指定的用户进行单独的权限设置的话就需要用到文件的 访问控制权限了. 我们可以对普通文件或目录进行设置ACL,通 ...

  5. Linux命令-sudo

    sudo命令用于给普通用户提供额外权利来完成原本只有超级用户才有权限完成的任务, 格式:sudo [参数] 命令名称 sudo命令与su命令的区别是,su命令允许普通用户完全变更为超级管理员的身份,但 ...

  6. 两个对象值转换的方法(BeanUtils.copyProperties与JSONObject.parseObject对比)

    将源对象赋值到目标对象方法: 方法一:BeanUtils.copyProperties(源对象, 目标对象); //org.springframework.beans.BeanUtils 方法二:目标 ...

  7. Linux命令学习-cp命令

    Linux中,cp命令的全称是copy,主要作用是复制文件或文件夹,类似于Windows下的复制功能. 假设当前处于wintest用户的主目录,路径为 /home/wintest ,存在文件夹test ...

  8. 由AnnotatedElementUtils延伸的一些所思所想

    这篇博客的两个主题: spring的AnnotatedElementUtils 个人源码阅读方法论分享 为什么要分享AnnotatedElementUtils这个类呢,这个类看起来就是一个工具类,听起 ...

  9. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

随机推荐

  1. cocos2dx 以子弹飞行为例解说拖尾效果类CCMotionStreak

    在游戏开发中,有时会须要在某个游戏对象上的运动轨迹上实现渐隐效果.比方子弹的运动轨迹,假设不借助引擎的帮助,这样的效果则须要通过大量的图片来实现.而Cocos2D-x的拖动渐隐效果类CCMotionS ...

  2. SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻

    http://blog.csdn.net/weiwenhp/article/details/8094739 目录(?)[-] SQL Server权限管理 login 与user的区别 角色role ...

  3. 关于Opengl中将24位BMP图片加入�一个alpha通道并实现透明的问题

    #include <windows.h>#include <GL/glut.h>#include <GL/glaux.h>#include <stdio.h& ...

  4. hadoop错误ERROR namenode.NameNode (NameNode.javamain(1657)) - Failed to start namenode java.net.BindException:Port in use:host1:50070

    解决方法: 1.通过lsof -i:50070(lsof可以通过yum install lsof安装)查看,发现是mysql被占用了 2.修改mysql端口 从/usr/share/mysql/my- ...

  5. 如何在Byte[]和String之间进行转换

    源自C#与.NET程序员面试宝典. 如何在Byte[]和String之间进行转换? 比特(b):比特只有0 1,1代表有脉冲,0代表无脉冲.它是计算机物理内存保存的最基本单元. 字节(B):8个比特, ...

  6. vi 使用笔记

    基本A 当前行追加J 去除本行和下一行之间的换行符(写CSS利器)~ 光标所在处的字符进行大小写互换* 向前搜索目前光标所在的单词# 向后搜索目前光标所在的单词% 查找与光标所在处相匹配的反括号, 包 ...

  7. VC++中 wstring和string的互相转换实现

    在VC++开发中,经常会用到string和wstring,这就需要二者之间的转换,项目中封装了wstring和string相互转换的2个函数,实现如下: //将wstring转换成string std ...

  8. '[linux下tomcat 配置

    tomcat目录结构 bin ——Tomcat执行脚本目录 conf ——Tomcat配置文件 lib ——Tomcat运行需要的库文件(JARS) logs ——Tomcat执行时的LOG文件 te ...

  9. VOL.1 利用vmware ThinApp 制作非XP下可以运行的IE6 【无插件版】(windows vista/7/8 x86/x64 )

    作为一名前端开发工程师,不免要考虑IE6的兼容性,但是大部分挑剔的同行们估计都不会用XP,所以基本上IE6的兼容性测试,都是使用IE Tester或者虚拟机. IE Tester的话,很多地方模拟的还 ...

  10. api图片传输,转成64位字符串进行传输

    byte[] getImageByte = HttpHelper.getImageByte(HttpContext.Current.Server.MapPath(("~/UploadFile ...