11.1 afternoon
幸运数字(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。
L--------
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #define maxn 510
- using namespace std;
- int n,cnt,a[maxn],b[maxn],c[maxn],d[maxn],A[maxn],B[maxn],C[maxn];
- char L[maxn],R[maxn];
- void Div(){
- int x=;
- for(int i=a[];i>=;i--){
- x=x*+a[i];
- b[i]=x/;
- x-=b[i]*;
- }
- for(int i=a[];i>=;i--)
- if(b[i]){
- b[]=i;break;
- }
- }
- void Mul1(){
- c[]=b[];
- for(int i=;i<=c[];i++)
- c[i]=b[i]*;
- for(int i=;i<=c[];i++)
- if(c[i]>){
- c[i+]+=c[i]/;
- c[i]%=;
- }
- while(c[c[]+]){
- c[]++;c[c[]+]+=c[c[]]/;c[c[]]%=;
- }
- }
- void Mul2(){
- for(int i=;i<=b[];i++)
- b[i]=b[i]*;
- for(int i=;i<=b[];i++)
- if(b[i]>){
- b[i+]+=b[i]/;
- b[i]%=;
- }
- while(b[b[]+]){
- b[]++;b[b[]+]+=b[b[]]/;b[b[]]%=;
- }
- }
- void Jian(){
- for(int i=;i<=a[];i++)
- d[i]=a[i]-c[i];
- for(int i=;i<=a[];i++)
- if(d[i]<){
- d[i]+=;d[i+]--;
- }
- for(int i=a[];i>=;i--)
- if(d[i]){
- d[]=i;break;
- }
- }
- void Jian2(){
- for(int i=;i<=B[];i++)
- C[i]=B[i]-A[i];
- for(int i=;i<=B[];i++)
- if(C[i]<){
- C[i]+=;C[i+]--;
- }
- for(int i=B[];i>=;i--)
- if(C[i]){
- C[]=i;break;
- }
- }
- void Add(int x){
- b[]+=x;int p=;
- while(b[p]>){
- b[p+]+=b[p]/;b[p]%=;p++;b[]=max(b[],p);
- }
- if(b[b[]+])b[]++;
- }
- int Get(){
- int r=;
- for(int i=d[];i>=;i--)
- r=r*+d[i];
- return r;
- }
- void Cl(){
- memset(a,,sizeof(a));
- memset(b,,sizeof(b));
- memset(c,,sizeof(c));
- memset(d,,sizeof(d));
- }
- int main()
- {
- freopen("number.in","r",stdin);
- freopen("number.out","w",stdout);
- scanf("%s%s",L,R);
- a[]=strlen(L);
- for(int i=;i<=a[];i++)
- a[i]=L[a[]-i]-'';
- a[]--;
- int p=;
- while(a[p]<){
- a[p]+=;a[p+]--;
- }
- if(a[a[]]==)a[]--;
- Div();Mul1();Jian();Mul2();
- n=Get();cnt=;
- for(int i=;i<=n;i++)
- if(i%==||i%==||i%==)cnt++;
- Add(cnt);
- for(int i=;i<=b[];i++)A[i]=b[i];
- Cl();
- a[]=strlen(R);
- for(int i=;i<=a[];i++)
- a[i]=R[a[]-i]-'';
- Div();Mul1();Jian();Mul2();
- n=Get();cnt=;
- for(int i=;i<=n;i++)
- if(i%==||i%==||i%==)cnt++;
- Add(cnt);
- for(int i=;i<=b[];i++)B[i]=b[i];
- Jian2();
- for(int i=A[];i>=;i--)
- printf("%d",A[i]);printf("\n");
- for(int i=B[];i>=;i--)
- printf("%d",B[i]);printf("\n");
- for(int i=max(C[],);i>=;i--)
- printf("%d",C[i]);printf("\n");
- 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。
考试的时候读错题爆零了233
正解你猜
蚂蚁运输(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 都行。
二分+模型转化+数学公式
- /*
- 听了琴神的方法 %%% 很好地模型转化
- 有大部分的点 l>r 先预处理一下
- 对于 r-l<=x 的直接忽略
- 另外的 走X Y
- 假设 X < Y 那么一定是 Abs(L-X)+Abs(R-Y)
- 不妨把 XY LR 看做二维平面内的两个点
- 这个就是表示的他的曼哈顿距离
- 那么问题就转化成了 对于二分到的答案Mid
- 能不能找到一对 X Y 使得 以(X,Y)为中心的
- 倾斜45°正方形能覆盖所有的第二类点
- 这里直接无脑求得点到直线的距离(不会旋转坐标系)
- 然后 然后就没了
- */
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #define inf 1e8
- #define G 1.4142135623730950488016887242097
- #define ld long double
- #define maxn 1000010
- using namespace std;
- int n,m,L[maxn],R[maxn],ans,X,Y;
- ld xi[maxn],yi[maxn];
- int init(){
- int x=,f=;char s=getchar();
- while(s<''||s>''){if(s=='-')f=-;s=getchar();}
- while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
- return x*f;
- }
- ld Abs(ld x){
- return x>?x:-x;
- }
- ld Min(ld x,ld y){
- return x<y?x:y;
- }
- ld Max(ld x,ld y){
- return x>y?x:y;
- }
- ld Cal(ld A,ld B,ld C,ld x,ld y){
- ld X=Abs((A*x+B*y+C)/(sqrt(A*A+B*B)));
- if(y>x&&B==-)X=-X;
- return X;
- }
- bool Judge(int x){
- ld x1=inf,y1=inf,x2=-inf,y2=-inf;
- for(int i=;i<=m;i++){
- if(R[i]-L[i]<=x)continue;
- x1=Min(x1,xi[i]);y1=Min(y1,yi[i]);
- x2=Max(x2,xi[i]);y2=Max(y2,yi[i]);
- }
- int now=ceil(Max(x2-x1,y2-y1)/(ld)(G));
- return now<=x;
- }
- int main()
- {
- freopen("ant.in","r",stdin);
- freopen("ant.out","w",stdout);
- n=init();m=init();
- for(int i=;i<=m;i++){
- L[i]=init();R[i]=init();
- if(L[i]>R[i])swap(L[i],R[i]);
- xi[i]=Cal(,-,,(ld)L[i],(ld)R[i]);
- yi[i]=Cal(,,,(ld)L[i],(ld)R[i]);
- }
- int l=,r=n;
- while(l<=r){
- int mid=l+r>>;
- if(Judge(mid)){
- ans=mid;r=mid-;
- }
- else l=mid+;
- }
- cout<<ans<<endl;
- return ;
- }
11.1 afternoon的更多相关文章
- 11.3 afternoon
迭代40 #include<cstdio> #include<cstring> using namespace std; int n,sum,falg; ],c[]; void ...
- 11.2 afternoon
#include<iostream> #include<cstdio> #define ll long long using namespace std; ll n,ans; ...
- 地区sql
/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...
- English trip -- VC(情景课) 6 C Is your class at 11:00? 你的课11点开始吗?
Grammar focus 语法点 Is your class at 11:00 ? # 带be动词的一般疑问句 Yes, it is No, it isn't 相当于 is not Pra ...
- 清北学堂—2020.1提高储备营—Day 2 afternoon(线段树、树状数组)
qbxt Day 2 afternoon --2020.1.18 济南 主讲:李佳实 目录一览 1.线段树 2.二叉搜索树(略过) 3.树状数组 总知识点:基础数据结构(本人初学感觉好难) 一.线段树 ...
- WinForm 天猫2013双11自动抢红包【源码下载】
1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- CSS垂直居中的11种实现方式
今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...
- C++ 11 多线程--线程管理
说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...
随机推荐
- (转载)KL距离,Kullback-Leibler Divergence
转自:KL距离,Kullback-Leibler Divergence KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对 ...
- ALTER TABLE 语句与 FOREIGN KEY 约束"FK_SCHEDULE_REFERENCE_POSTCONF"冲突。
主要原因是因为两个表中有数据不匹配,只要把不匹配的数据删掉就行了.
- HTML Imports
为什么需要导入? 先想想你在 web 上是如何加载不同类型的资源.对于 JS,我们有 <script src>.<link rel="stylesheet"> ...
- Codeforces Round #205 (Div. 2) : A
题意: 要求找到最少次数的交换次数使得两组数都是偶数: 很明显答案要么是0,要么是1,或者不管怎么交换都不行(-1): 所以: #include<cstdio> #define maxn ...
- android的原理,为什么不需要手动关闭程序
转自android的原理,为什么不需要手动关闭程序 不用在意剩余内存的大小,其实很多人都是把使用其他系统的习惯带过来来了. Andoird大多应用没有退出的设计其实是有道理的,这和系统对进程的调度机制 ...
- python包管理-distutils,setuptools,pip,virtualenv等介绍
python包管理-distutils,setuptools,pip,virtualenv等介绍 对于每个编程语言来说打包和发布开发包往往非常重要,而作为一个编程者能够快速容易的获得并应用这些由第三方 ...
- css学习笔记一
1.在css开头用* {margin:0;padding:0;}可以清除所有样式 2.在css中table,th,td {padding:0;}效果等同于cellpadding="0″. 3 ...
- python手记(31)
#!/usr/bin/env python #-*- coding: utf-8 -*- import cv2 import numpy as np fn="test2.jpg" ...
- bzoj3631
其实这道题其实可以转化为这样一个问题 给定n-1对点,将这两点x,y间简单路径上的点(包括起点终点)权值+1 (最后再把除了起点外的点的权值-1,注意终点没糖吃) 求每个点的权值 首先想到的是先找LC ...
- FAT32,NTFS,EXT3,支持的最大分区和单个文件大小?
FAT32 Filesystem: 最大单一档案大小 4GB 最大文件系统总容量 128GB NTFS Filesystem: 最大单一档案大小 64GB 最大文件系统总容量 2TB Ext3 Fil ...