模拟赛1101d2
幸运数字(number)
Time Limit:1000ms Memory Limit:64MB
题目描述
LYK 最近运气很差,例如在 NOIP 初赛中仅仅考了 90 分,刚刚卡进复赛,于是它决定使
用一些方法来增加自己的运气值。
它觉得,通过收集幸运数字可以快速的增加它的 RP 值。
它给幸运数字下了一个定义:如果一个数 x 能被 3 整除或被 5 整除或被 7 整除,则这个
数为幸运数字。
于是它想让你帮帮它在 L~R 中存在多少幸运数字。
输入格式(number.in)
第一行两个数 L,R。
输出格式(number.out)
一个数表示答案。
输入样例
10 15
输出样例
4
数据范围
对于 50%的数据 1<=L<=R<=10^5。
对于 60%的数据 1<=L<=R<=10^9。
对于 80%的数据 1<=L<=R<=10^18。
对于 90%的数据 1<=L<=R<=10^100。
对于另外 10%的数据 L=1, 1<=R<=10^100。
对于 100%的数据 L, R 没有前导 0。
/*
容斥原理
对于1~x中,ans=x/3+x/5+x/7-x/15-x/21-x/35+x/105
注意高精度时应该先把该加的都加上,在进行减法,这样可以避免出现负数。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#define N 200
using namespace std;
char s[N];int a1[N],b1[N],c1[N];
struct node
{
int a[N],len;
void clear()
{
memset(a,,sizeof(a));len=;
}
};node s1,s2,ans;
node jia(node x,node y)
{
node c;c.clear();
memset(a1,,sizeof(a1));
memset(b1,,sizeof(b1));
memset(c1,,sizeof(c1));
for(int i=;i<=x.len;i++)a1[i]=x.a[x.len-i+];
for(int i=;i<=y.len;i++)b1[i]=y.a[y.len-i+];
int len=max(x.len,y.len);
for(int i=;i<=len;i++)
{
c1[i]+=a1[i]+b1[i];
c1[i+]+=c1[i]/;
c1[i]%=;
}
if(c1[len+])len++;
c.len=len;
for(int i=len;i>=;i--)c.a[i]=c1[len-i+];
return c;
}
node jian(node x,node y)
{
node c;c.clear();
memset(a1,,sizeof(a1));
memset(b1,,sizeof(b1));
memset(c1,,sizeof(c1));
for(int i=;i<=x.len;i++)a1[i]=x.a[x.len-i+];
for(int i=;i<=y.len;i++)b1[i]=y.a[y.len-i+];
int len=max(x.len,y.len);
for(int i=;i<=len;i++)
{
if(a1[i]>=b1[i])c1[i]=a1[i]-b1[i];
else
{
c1[i]=a1[i]+-b1[i];
a1[i+]--;
}
}
int p=len;
while(c1[p]==)p--;
for(int i=p;i>=;i--)c.a[++c.len]=c1[i];
return c;
}
node chu(node x,int b)
{
node c;c.clear();
memset(a1,,sizeof(a1));
int xx=;
for(int i=;i<=x.len;i++)
{
a1[i]=(xx*+x.a[i])/b;
xx=xx*+x.a[i]-a1[i]*b;
}
int len=;
while(!a1[len]&&len)len++;
for(int i=len;i<=x.len;i++)
c.a[++c.len]=a1[i];
return c;
}
void init()
{
s1.a[s1.len]--;
for(int i=s1.len;i>=;i--)
{
if(s1.a[i]>=)break;
else
{
s1.a[i]+=;
s1.a[i-]--;
}
}
if(!s1.a[])
{
s1.len--;
for(int i=;i<=s1.len;i++)
s1.a[i]=s1.a[i+];
}
}
int main()
{
//freopen("number.in","r",stdin);
//freopen("number.out","w",stdout);
cin>>s;s1.len=strlen(s);
for(int i=;i<=s1.len;i++)s1.a[i]=s[i-]-'';
cin>>s;s2.len=strlen(s);
for(int i=;i<=s2.len;i++)s2.a[i]=s[i-]-'';
init();
ans=chu(s2,);
ans=jia(ans,chu(s2,));
ans=jia(ans,chu(s2,));
ans=jia(ans,chu(s2,));
ans=jia(ans,chu(s1,));
ans=jia(ans,chu(s1,));
ans=jia(ans,chu(s1,));
ans=jian(ans,chu(s2,));
ans=jian(ans,chu(s2,));
ans=jian(ans,chu(s2,));
ans=jian(ans,chu(s1,));
ans=jian(ans,chu(s1,));
ans=jian(ans,chu(s1,));
ans=jian(ans,chu(s1,));
for(int i=;i<=ans.len;i++)
printf("%d",ans.a[i]);
return ;
}
位运算(bit)
Time Limit:2000ms Memory Limit:64MB
题目描述
lyk 最近在研究位运算。它发现除了 xor,or,and 外还有很多运算。
它新定义了一种运算符“#” 。
具体地,可以由 4 个参数来表示。 令 a[i][j]表示 i#j。 其中 i,j 与 a 的值均∈[0,1]。
当然问题可以扩展为>1 的情况,具体地,可以将两个数分解为 p 位,然后对于每一位
执行上述的位运算,再将这个二进制串转化为十进制就可以了。
例如当 a[0][0]=0, a[1][1]=0, a[0][1]=1, a[1][0]=1 时,3#4 在 p=3 时等于 7,2#3 在
p=4 时等于 1(实际上就是异或运算)。
现在 lyk 想知道的是,已知一个长为 n 的数列 b。它任意选取一个序列 c,满
足 c1<c2<...<ck,其中 1≤c1 且 ck≤n,定义这个序列的价值为 b{c1}#b{c2}#...#b{ck}
的平方。
这里我们假设 k 是正整数,因此满足条件的 c 的序列个数一定是 2^n−1 。 lyk 想知道
所有满足条件的序列的价值总和是多少。
由于答案可能很大, 你只需输出答案对 1,000,000,007 取模后的结果即可。
输入格式(bit.in)
第一行两个数 n,p。
第二行 4 个数表示 a[0][0], a[0][1], a[1][0], a[1][1]。
第三行 n 个数表示 bi(0<=bi<2^p)。
输出格式(bit.out)
一个数表示答案。
输入样例
3 30
0 1 1 0
1 2 3
输出样例
28
样例解释
{1}的价值为 1, {2}的价值为 4, {3}的价值为 9, {1,2}的价值为 9, {1,3}的价值为 4, {2,3}
的价值为 1, {1,2,3}的价值为 0,因此 7 个子集的价值总和为 28。
数据范围
总共 10 组数据。
对于第 1,2 组数据 n<=5。
对于第 3,4 组数据 n<=10000, p=1。
对于第 5 组数据 a 值均为 0。
对于第 6 组数据 a 值均为 1。
对于第 7 组数据 a[0][0]=0,a[1][0]=0,a[1][1]=1,a[0][1]=1。
对于第 8,9 组数据 n<=1000, p<=10。
对于所有数据 n<=10000, 1<=p<=30。
蚂蚁运输(ant)
Time Limit:5000ms Memory Limit:64MB
题目描述
LYK 在观察一些蚂蚁。
蚂蚁想要积攒一些货物来过冬。积攒货物的方法是这样的。
对于第 i 只蚂蚁,它要从 li出发,拿起货物,走到 ri处放下货物,需要消耗的时间为|ri-li|。
而且所有蚂蚁都是可以同时进行的,也就是说,假如有 m 只蚂蚁,那么运输完货物的时间
为 max{|ri-li|}。
LYK 决定帮蚂蚁一把,它发明了空间传输装置。具体地,当蚂蚁走到 X 处时,它可以不
耗费任意时间的情况下瞬间到达 Y,或者从 Y 到达 X。也就是说,一个蚂蚁如果使用了空间
传输装置,它耗费的时间将会是 min{|li-X|+|ri-Y|,|li-Y|+|ri-X|},当然蚂蚁也可以选择徒步走
到目标点。
由于空间传输装置非常昂贵, LYK 打算只建造这么一台机器。并且 LYK 想让蚂蚁运输完
货物的时间尽可能短,你能帮帮它吗?
输入格式(ant.in)
第一行两个数 n,m, n 表示 li,ri 的最大值。
接下来 m 行,每行两个数 li,ri。
输出格式(ant.out)
一个数表示答案
输入样例
5 2
1 3
2 4
输出样例
1
数据范围
对于 20%的数据 n,m<=100。
对于 40%的数据 n,m<=1000。
对于 60%的数据 n<=100000, m<=1000。
对于 80%的数据 n,m<=100000。
对于 100%的数据 n,m<=1000000, 1<=li,ri<=n( li=ri 时你甚至可以无视这只蚂蚁)。
样例解释
令空间传输装置的参数中 X=2, Y=3 或者 X=3, Y=2 都行。
/*
二分答案
因为要求|li-X|+|ri-Y|<=mid,所以
li-X+ri-Y<=mid;li-X+Y-ri<=mid;X-li+Y-ri<=mid;X-li+ri-Y<=mid;
即 li+ri-mid<=X+Y<=li+ri+mid;li-ri-mid<=X-Y<=li-ri+mid
需要找要满足上述要求的X,Y。
*/
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#define N 1000010
using namespace std;
int n,m;
struct node
{
int x,y;
};node a[N];
int read()
{
int num=,flag=;char c=getchar();
while(c<''||c>''){if(c=='-')flag=-;c=getchar();}
while(c>=''&&c<=''){num=num*+c-'';c=getchar();}
return num*flag;
}
bool check(int k)
{
int mn=1e9,mx=-1e9;
for(int i=;i<=m;i++)
{
if(a[i].y-a[i].x<=k)continue;
mx=max(a[i].x+a[i].y-k,mx);
mn=min(a[i].x+a[i].y+k,mn);
}
if(mx>mn)return false;
mx=-1e9,mn=1e9;
for(int i=;i<=m;i++)
{
if(a[i].y-a[i].x<=k)continue;
mx=max(a[i].x-a[i].y-k,mx);
mn=min(a[i].x-a[i].y+k,mn);
}
if(mx>mn)return false;
return true;
}
int main()
{
freopen("jh.in","r",stdin);
//freopen("ant.in","r",stdin);
//freopen("ant.out","w",stdout);
int t;scanf("%d%d",&n,&t);
while(t--)
{
int x,y;scanf("%d%d",&x,&y);
if(x>y)swap(x,y);
if(x!=y){a[++m].x=x;a[m].y=y;}
}
int l=,r=N,ans;
while(l<=r)
{
int mid=(l+r)/;
if(check(mid))
{
ans=mid;r=mid-;
}
else l=mid+;
}
printf("%d",ans);
return ;
}
模拟赛1101d2的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- PKUSC 模拟赛 day1 下午总结
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
- [GRYZ]寒假模拟赛
写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...
- BZOJ2741: 【FOTILE模拟赛】L
2741: [FOTILE模拟赛]L Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1170 Solved: 303[Submit][Status] ...
随机推荐
- C#之LinQ数据库
一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在foreach一个集合的时候, 也要为遍历的集合的元素,指 ...
- 利用loadrunner代理方式,录制手机APP脚本
利用loadrunner代理方式录制手机(iPhone.android)应用程序HTTP脚本 工具/原料 loadrunner 智能手机 方法/步骤 利用笔记本网卡或者类似360随身wifi,在安 ...
- 对象的constructor属性
对象的constructor属性, 最初是用来标识对象类型的. 比如 ,我们定义一个 Person类,然后实例化两个对象. function Person(name, age, job){this.n ...
- JavaScript中的跨域
跨域是什么 跨域就是指从一个域名的网页去请求另一个域名的资源,因为JavaScript同源策略的限制,资源无法获取.比如从www.baidu.com 页面去请求 www.google.com 的资源, ...
- canvas 中save和restore的用法
在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法. onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布. 在onDraw方法里,我们经常会 ...
- phpDocumentor 注释语法详解
PHPDocumentor是强大的代码注释生成器,本文对各个参数进行了简单地的总结: @abstract-------------使用@abstract标记来声明一个方法,类变量或类必须重新定义子类中 ...
- Exception异常
JAVA异常指的是运行期出现的错误. 观察错误的名字和行号最重要. 运用关键字try将可能出错的语句catch出来并添加友好的话 \ 在这句话中的ae代表一个自己命名的对象. 1.要捕获首先需要知道错 ...
- MySQL表结构及数据的备份
1.Navicat for MySQL 选择要保存的表,右键转储SQL文件,导出的sql文件中包括表的定义和表的数据两部分. 其他办法: (1) create table dust select * ...
- Game of Life I & II
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
- c里面的fflush函数
NAME fflush - flush a stream SYNOPSIS #include <stdio.h> int fflush(FILE *stream); DESCRIPTION ...