• hdu_5683_zxa and xor(非正解的暴力)


    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5683

    题意:

    问题描述
    zxa最近对按位异或(exclusive disjunction)产生了极大的兴趣,为此他拿出了一个长度为nn的非负整数序列a_1,a_2,cdots,a_na1,a2,,an。
    
    zxa觉得这样太单调了,于是他定义了一种方法funct(x,y)funct(x,y),表示将a_xax不可逆转地修改为yy后计算otimes_{1leq i < jleq n}{(a_i+a_j)}1i<jn(ai+aj)作为该方法的返回值。
    
    zxa很好奇,如果他对这个序列调用mm次这样的方法,那么每次得到的返回值分别是多少,你能帮助他吗?
    
    提示:otimes_{1leq i < jleq n}{(a_i+a_j)}1i<jn(ai+aj)(a_1+a_2)otimes(a_1+a_3)otimescdotsotimes(a_1+a_n)otimes(a_2+a_3)otimes(a_2+a_4)otimescdotsotimes(a_2+a_n)otimescdotsotimes(a_{n-1}+a_n)(a1+a2)(a1+a3)(a1+an)(a2+a3)(a2+a4)(a2+an)(an1+an)
    输入描述
    第一行有一个正整数TT,表示有TT组数据。
    
    对于每组数据:
    
    第一行有两个正整数nnmm。
    
    第二行有nn个非负整数,表示a_1,a_2,cdots,a_na1,a2,,an。
    
    接下来mm行,第i(1leq ileq m)i(1im)行有两个非负整数xxyy,表示第ii调用的是funct(x,y)funct(x,y)。
    
    每一行相邻数字之间只有一个空格。
    
    1leq Tleq 1000,2leq nleq 2cdot10^4,1leq mleq 2cdot10^4,0leq a_i,yleq 10^9,1leq xleq n,1leqsum{n},sum{m}leq10^51T1000,2n2104,1m2104,0ai,y109,1xn,1n,m105
    
    输出描述
    对于每组数据,输出mm行,第i(1leq ileq m)i(1im)行包含一个非负整数,表示第ii次调用方法的返回值。
    
    输入样例
    1
    3 3
    1 2 3
    1 4
    2 5
    3 6
    
    输出样例
    4
    6
    8
    
    Hint
    第一次操作后序列为{4,2,3}{4,2,3}(4+2)otimes(4+3)otimes(2+3)=4(4+2)(4+3)(2+3)=4。
    
    第二次操作后序列为{4,5,3}{4,5,3}(4+5)otimes(4+3)otimes(5+3)=6(4+5)(4+3)(5+3)=6。
    
    第三次操作后序列为{4,5,6}{4,5,6}(4+5)otimes(4+6)otimes(5+6)=8(4+5)(4+6)(5+6)=8

    题解:在BC的终测 我居然TLE了,不科学,唐老师放宽了时限,和我写法差不多,常数也差不多的都过了,然而我没过,很是不爽,然而在OJ上提交 5600+ms A C

     1 #include<cstdio>
     2 #define FFC(i,a,b) for(int i=a;i<=b;i++)
     3 int s[20010],da[20010];
     4 int main(){
     5     int t,m,n,a,b;
     6     scanf("%d",&t);
     7     while(t--){
     8         scanf("%d%d",&n,&m);
     9         FFC(i,1,n)scanf("%d",&s[i]);
    10         FFC(i,1,n){
    11             int ans=0;
    12             FFC(j,i+1,n)ans=ans^(s[i]+s[j]);
    13             da[i]=ans;
    14         }
    15         FFC(i,1,m){
    16             scanf("%d%d",&a,&b);
    17             int tmp=s[a];
    18             s[a]=b;
    19             int ans=0,aans=0;
    20             FFC(j,a+1,n)ans=ans^(b+s[j]);
    21             da[a]=ans;
    22             FFC(j,1,a-1)da[j]=da[j]^(s[j]+tmp),da[j]=da[j]^(s[j]+b);
    23             FFC(i,1,n)aans^=da[i];
    24             printf("%d
    ",aans);
    25         }
    26     }
    27     return 0;
    28 }
    View Code



  • 相关阅读:
    2016/09/18
    2016/09/16
    2016/09/15
    2016/09/14
    2016/09/13
    2016/09/12
    2016/09/03
    2016/09/02
    HDU1850 Being a Good Boy in Spring Festival(NIM)
    POJ3070 Fibonacci(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/bin-gege/p/5696160.html
Copyright © 2020-2023  润新知