• 51nod1406 与查询


    这题卡I/O。。。dp一下。。。

    #include<cstdio>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define rep(i,s,t) for(int i=s;i<=t;i++)
    #define dwn(i,s,t) for(int i=s;i>=t;i--)
    #define clr(x,c) memset(x,c,sizeof(x))
    const int BufferSize=10000000;
    char buffer[BufferSize],*head,*tail;
    inline char Getchar() {
        if(head==tail) {
            int l=fread(buffer,1,BufferSize,stdin);
            tail=(head=buffer)+l;
        }
        return *head++;
    }
    inline int read() {
        int x=0,f=1;char c=Getchar();
        for(;!isdigit(c);c=Getchar()) if(c=='-') f=-1;
        for(;isdigit(c);c=Getchar()) x=x*10+c-'0';
        return x*f;
    }
    char sh[15];
    void print(int x){
    	if(!x) {
    		puts("0");return ;
    	}
    	int cnt=0;
    	while(x) sh[++cnt]=x%10,x/=10;
    	dwn(i,cnt,1) putchar(sh[i]+48);
    	putchar('
    ');
    }
    const int nmax=1e6+5;
    const int inf=0x7f7f7f7f;
    int ans[nmax];
    int main(){
    	int n=read(),u,mx=0;
    	rep(i,1,n) ans[u=read()]++,mx=max(mx,u);
    	rep(i,0,20) rep(j,1,mx) if(j&(1<<i)) ans[j-(1<<i)]+=ans[j];
    	ans[0]=n;
    	rep(i,0,1000000) print(ans[i]);
    	return 0;
    }     
    

      

    题目来源: CodeForces
    基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题
     收藏
     关注

    有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1,000,000

    Input
    第一行输入一个整数n。(1<=n<=1,000,000).
    第二行有n个整数a[0],a[1],a[2],...a[n-1],以空格分开.(0<=a[i]<=1,000,000)
    Output
    对于每一组数据,输出1000001行,第i行对应和i相与结果是i的有多少个数字。
    Input示例
    3
    2 3 3
    Output示例
    3
    2
    3
    2
    0
    0
    ……
    后面还有很多0
    System Message (题目提供者)
     
     
  • 相关阅读:
    第 4 章 容器
    第 4 章 容器
    第 4 章 容器
    第 4 章 容器
    第 3 章 镜像
    第 3 章 镜像
    seekbar拖动条控件
    OnClick,onLongClick,OnTouch调用机制
    在TextView文本中实现activity跳转
    TextView显示html图片方法
  • 原文地址:https://www.cnblogs.com/fighting-to-the-end/p/5910743.html
Copyright © 2020-2023  润新知