【BestCoder Round #16】

2 篇文章 0 订阅

好久没爬了……尝试着打了一下顺便练习写部落格……

【1001】【hdu5086】

很简单的找规律题?每个点找一下一共出现了多少次就行了。。O(n)

#include <iostream>
#include <cstdio>
using namespace std;
#define MOD 1000000007
long long N,M;
int main(){
    int T;
    long long res;
    long long tmp;
    long long t2;
    cin>>T;
    while(T--){
        scanf("%d",&N);
        tmp=N-1;
        res=0;
        for(int i=0;i<N;++i){
            tmp=(i+1)*(N-i);
            tmp%=MOD;
            scanf("%I64d",&t2);
            res+=t2*tmp;
            res%=MOD;
        }
        printf("%I64d\n",res%MOD);
    }
    return 0;
}

【1002】【hdu5087】

赛的时候看到N=1000 T=100时思考了一下觉得N^2的算法会T然后就随便搞了个NlogN的算法……然后就果断挂ST了……

赛后看了题解,N^2的算法目测挺简单的,大约就是dp的时候处理一下每个点的种类数?

于是就懒的写了……

【1003】【hdu5088】

其实就是找N个数中是不是能取到(元素数不少于一的)一部分,使他们的异或和为0。然后把每个数都考虑成Z_2上的方程,比如说6二进制是110对应的方程就是x^2+x=0。10的二进制是1010对应的方程就是x^3+x=0。然后看看这个方程组的秩是不是等于方程数(N)。如果等于就说明无法取出这样的一部分。A[i]范围是1e12,所以当N>41时肯定秩比方程数小。然后不要忘了用long long。。

我大概算是用高斯消元判定是不是能化简出0=0的等式(如果能化简出就说明秩!=N)。因为在Z_2上所以方程加减直接用int做xor操作就可以了。

当然我的高斯消元写的很烂。题解上说是O(40),我大概是O(40^2log40)?。。总之不要在意细节。。

#include <iostream>
#include <algorithm>
using namespace std;
int T,N;
long long arr[1003];
int main(){
    cin>>T;
    while(T--){
        cin>>N;
        for(int i=0;i<N;++i)
            cin>>arr[i];
        if(N>40)
            cout<<"Yes"<<endl;
        else{
            std::sort(arr,arr+N);
            for(int k=41;k>=0;--k){
                if(arr[N-1]< (1<<k))
                    continue;
                for(int i=N-2;i>=0&&arr[i]>=(1<<k);--i)
                    arr[i]^=arr[N-1];
                if(--N==0)
                    break;
                std::sort(arr, arr+N);
            }
            if(arr[0]==0)
                cout<<"Yes"<<endl;
            else
                cout<<"No"<<endl;
        }
    }
    return 0;
}

【1004】【hdu5089】
目前看还是0A。。我觉得肯定是能算出来一个很厉害很厉害的数学公式吧?大概……

反正我不会!


p.s.我果然还是不适合写文档。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值