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 ...
随机推荐
- LED灯开关电路
“灯控项目”中LED灯开关控制电路,LED供电电压12V,工作电流200mA. 电路图
- Linux TCP/IP parameters reference
This is a reference of IP networking parameters that are configurable as described in our linux twea ...
- linux kernel (proc文件系统)参数
http://blog.csdn.net/guowake/article/details/3279796 Linux Proc文件系统,通过对Proc文件系统进行调整,达到性能优化的目的. 二./pr ...
- 用java读取properties文件--转
今天为了通过java读取properties文件,google了很长时间,终于找到了.现在特记录之和大家一起分享. 下面直接贴出代码:java类 public class Mytest pub ...
- Google Map API v2 番外篇 关于gps位置偏差及修正方法探讨
我的手机是M35C,在我自己的map activity中,通过gps获取到的经纬度比实际地址总是有500米左右的偏差. 在网上搜索了很多,都说这个是测绘局为了保密故意弄成这样的.gps全球定位系统获得 ...
- Bash中的数组
变量:$VAR或者${VAR} 数组:${VAR[$i]} 打印整个数组:echo ${VAR[@]} 统计数组元素个数:echo ${#VAR[@]} 从文件读入数组(按行读入):VAR=(`cat ...
- Dom4j解析Xml文件,Dom4j创建Xml文件
Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...
- C#中的static静态变量的用法
静态全局变量 定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量. 特点: A.该变量在全局数据区分配内存. B.初始化:如果不显式初始化,那么将被隐式初始化为0. 静 ...
- fseek()
原文地址:fseek()作者:xiaoxin 意思是把文件指针指向文件的开头 fseek 函数名: fseek 功 能: 重定位流上的文件指针 用 法: int fseek(FILE *s ...
- PHP中的strtotime()对于31日求上个月有问题
原文出处 <?php $date = "2012-07-31"; $date_unix = strtotime($date); $lastmonth = strtotime( ...