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=0;
    for(int i=a[0];i>=1;i--){
        x=x*10+a[i];
        b[i]=x/105;
        x-=b[i]*105;
    }
    for(int i=a[0];i>=1;i--)
        if(b[i]){
            b[0]=i;break;
        }
}
void Mul1(){
    c[0]=b[0];
    for(int i=1;i<=c[0];i++)
        c[i]=b[i]*105;
    for(int i=1;i<=c[0];i++)
        if(c[i]>9){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    while(c[c[0]+1]){
        c[0]++;c[c[0]+1]+=c[c[0]]/10;c[c[0]]%=10;
    }
}
void Mul2(){
    for(int i=1;i<=b[0];i++)
        b[i]=b[i]*57;
    for(int i=1;i<=b[0];i++)
        if(b[i]>9){
            b[i+1]+=b[i]/10;
            b[i]%=10;
        }
    while(b[b[0]+1]){
        b[0]++;b[b[0]+1]+=b[b[0]]/10;b[b[0]]%=10;
    }
}
void Jian(){
    for(int i=1;i<=a[0];i++)
        d[i]=a[i]-c[i];
    for(int i=1;i<=a[0];i++)
        if(d[i]<0){
            d[i]+=10;d[i+1]--;
        }
    for(int i=a[0];i>=1;i--)
        if(d[i]){
            d[0]=i;break;
        }
}
void Jian2(){
    for(int i=1;i<=B[0];i++)
        C[i]=B[i]-A[i];
    for(int i=1;i<=B[0];i++)
        if(C[i]<0){
            C[i]+=10;C[i+1]--;
        }
    for(int i=B[0];i>=1;i--)
        if(C[i]){
            C[0]=i;break;
        }
}
void Add(int x){
    b[1]+=x;int p=1;
    while(b[p]>9){
        b[p+1]+=b[p]/10;b[p]%=10;p++;b[0]=max(b[0],p);
    }
    if(b[b[0]+1])b[0]++;
}
int Get(){
    int r=0;
    for(int i=d[0];i>=1;i--)
        r=r*10+d[i];
    return r;
}
void Cl(){
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    memset(d,0,sizeof(d));
}
int main()
{
    freopen("number.in","r",stdin);
    freopen("number.out","w",stdout);
    scanf("%s%s",L,R);
    a[0]=strlen(L);
    for(int i=1;i<=a[0];i++)
        a[i]=L[a[0]-i]-‘0‘;
    a[1]--;
    int p=1;
    while(a[p]<0){
        a[p]+=10;a[p+1]--;
    }
    if(a[a[0]]==0)a[0]--;
    Div();Mul1();Jian();Mul2();
    n=Get();cnt=0;
    for(int i=1;i<=n;i++)
        if(i%3==0||i%5==0||i%7==0)cnt++;
    Add(cnt);
    for(int i=0;i<=b[0];i++)A[i]=b[i];
    Cl();
    a[0]=strlen(R);
    for(int i=1;i<=a[0];i++)
        a[i]=R[a[0]-i]-‘0‘;
    Div();Mul1();Jian();Mul2();
    n=Get();cnt=0;
    for(int i=1;i<=n;i++)
        if(i%3==0||i%5==0||i%7==0)cnt++;
    Add(cnt);
    for(int i=0;i<=b[0];i++)B[i]=b[i];
    Jian2();
    for(int i=A[0];i>=1;i--)
        printf("%d",A[i]);printf("\n");
    for(int i=B[0];i>=1;i--)
        printf("%d",B[i]);printf("\n");
    for(int i=max(C[0],1);i>=1;i--)
        printf("%d",C[i]);printf("\n");
    return 0;
}

位运算(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=0,f=1;char s=getchar();
    while(s<‘0‘||s>‘9‘){if(s==‘-‘)f=-1;s=getchar();}
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x*f;
}
ld Abs(ld x){
    return x>0?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==-1)X=-X;
    return X;
}
bool Judge(int x){
    ld x1=inf,y1=inf,x2=-inf,y2=-inf;
    for(int i=1;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=1;i<=m;i++){
        L[i]=init();R[i]=init();
        if(L[i]>R[i])swap(L[i],R[i]);
        xi[i]=Cal(1,-1,0,(ld)L[i],(ld)R[i]);
        yi[i]=Cal(1,1,0,(ld)L[i],(ld)R[i]);
    }
    int l=0,r=n;
    while(l<=r){
        int mid=l+r>>1;
        if(Judge(mid)){
            ans=mid;r=mid-1;
        }
        else l=mid+1;
    }
    cout<<ans<<endl;
    return 0;
}

时间: 2024-10-15 07:05:33

11.1 afternoon的相关文章

五大常见算法策略——递归与分治策略

摘要:递归与分治策略是五大常见算法策略之一,分治策略的思想就是分而治之,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的解.而分治与递归很多情况下都是一起结合使用的,能发挥出奇效(1+1>2),这篇文章我们将先从递归说起,再逐渐向分治过渡,主要讲解方式是通过9个例题来说明问题的,问题都是根据难度由简到难,由浅入深,对递归与分治能有个大概的了解雏形,当然最重要还是要做大量练习才能掌握. 1.递归 我们第一次接触递归一般都是在初学C语

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET

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  Practice 练习 Is his class at twelve o'clock? No,he isn't. his class is at eleven o'clock. Is your Appointment at half past twelve? No, it isn't. My Appoin

A bug of logback1.11

logback is the successor of log4j, they are written by a same author, it is supposed to be more advanced and convenient.But there is a bug lies in version logback1.11, we should not ignore this. The bug is that: When a thread is writing log continuou

How to Uninstall Internet Explorer 11 for Windows 7

Internet Explorer 11 is the newest version of Microsoft's web browser, but not everyone is a fan. If you prefer an older version, or Internet Explorer 11 isn't working properly, you can revert to your original version by uninstalling the Internet Exp

C#认证第一章1 题 11题

C#第一章第一题 C#认证第一章  11题