BestCoder Round #56 1002 Clarke and problem 1003 Clarke and puzzle

今天第二次做BC,不习惯hdu的oj,CE过2次。。。

1002 Clarke and problem

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

#define PB push_back
#define MP make_pair
#define fi first
#define se second

#define cer(x) cout<<#x<<‘=‘<<endl
typedef long long ll;
const int maxn = 1050;
int dp[2][maxn];

//#define LOCAL
const int MOD = 1e9+7;

int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    int T; scanf("%d",&T);
    while(T--){
        int n,p; scanf("%d%d",&n,&p);
        //fill(dp[0],dp[0]+p,0);
        memset(dp[0],0,sizeof(dp[0]));
        dp[0][0] = 1;
        for(int i = 0; i < n; i++){
            int c = i&1,nx = (i&1)^1;
            //fill(dp[nx],dp[nx]+p,0);
            memcpy(dp[nx],dp[c],sizeof(dp[nx]));
            int a; scanf("%d",&a);
            a %= p; if(a<0) a += p; //G++编译器负数取模还是负数,在这里RE了几次
            for(int j = 0; j < p; j++){
                if(dp[c][j]){
                    int t = (j+a)%p;
                    dp[nx][t] = (dp[nx][t]+ dp[c][j])%MOD;
                }
            }
        }
        printf("%d\n",dp[n&1][0]);
    }
    return 0;
}

1003  Clarke and puzzle

卡时间卡的太紧了,按照官方题解做法980ms过。。。把memset换成for,890ms

自信地写了个二维线段树被卡。写BIT还遇到一些奇怪的错误。

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

#define PB push_back
#define MP make_pair
#define fi first
#define se second

#define cer(x) cout<<#x<<‘=‘<<endl
typedef long long ll;

const int maxn = 505;

int C[maxn][maxn],n,m,c[maxn][maxn];
#define lb(x) ((x)&-(x))

int sum(int x,int y){
    int r = 0;
    for(int i=x;i>0;i-=lb(i)) //for(; x>0; x-=lb(x)) 奇怪的错误,写成这样T了
        for(int j=y;j>0;j-=lb(j))
            r ^= C[i][j];
    return r;
}
void add(int x,int y,int val){
    for(int i=x;i<=n;i+=lb(i))
        for(int j=y;j<=m;j+=lb(j))
            C[i][j] ^= val;
}

//#define LOCAL

int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    int T; scanf("%d",&T);
    while(T--){
        int q; scanf("%d%d%d",&n,&m,&q);

        //memset(C,0,sizeof(C));
        for(int i = 1; i <= n; i++){
            //fill(C[i]+1,C[i]+1+m,0);
            for(int j = 1; j <= m; j++) C[i][j] = 0;
        }

        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                scanf("%d",c[i]+j);
                add(i,j,c[i][j]);
            }
        }
        for(int i = 0; i < q; i++){
            int op; scanf("%d",&op);
            if(op == 1){
                int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                puts(sum(x2,y2)^sum(x2,y1-1)^sum(x1-1,y2)^sum(x1-1,y1-1)?"Yes":"No");
            }else {
                int x,y,v; scanf("%d%d%d",&x,&y,&v);
                add(x,y,c[x][y]^v);
                c[x][y] = v;
            }
        }
    }
    return 0;
}

时间: 2024-10-12 22:40:50

BestCoder Round #56 1002 Clarke and problem 1003 Clarke and puzzle的相关文章

BestCoder Round #4 1002

这题真是丧心病狂,引来今天的hack狂潮~ Miaomiao's Geometry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 10    Accepted Submission(s): 3 Problem Description There are N point on X-axis . Miaomiao would like t

HDU BestCoder Round #1 1002 项目管理

项目管理 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! 两个节点间可能有多条边,不过一条边的两端必然是不同的节点. 每个节点都有一个能量值. 现在我们

Manacher BestCoder Round #49 ($) 1002 Three Palindromes

题目传送门 1 /* 2 Manacher:该算法能求最长回文串,思路时依据回文半径p数组找到第一个和第三个会文串,然后暴力枚举判断是否存在中间的回文串 3 另外,在原字符串没啥用时可以直接覆盖,省去一个数组空间,位运算 >>1 比 /2 速度快,用了程序跑快200ms左右,位运算大法好 4 */ 5 /************************************************ 6 Author :Running_Time 7 Created Time :2015-8-1

矩阵快速幂---BestCoder Round#8 1002

当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n)   f(n-1)] = [f(n-1)    f(n-2)] [ 1 1 ]     [ 1 0 ] 设A = [ 1 1 ]  [ 1 0 ] [f(n)   f(n-1)] = [f(n-2)   f(n-3)]*A*A[f(n)   f(n-1)] = [f(2)   f(1)]*A^(n-2)矩阵满足结合律,所以先计算A^

二分图判定+点染色 BestCoder Round #48 ($) 1002 wyh2000 and pupil

题目传送门 1 /* 2 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 3 每一次二分图匹配时,将点多的集合加大最后第一个集合去 4 注意:n <= 1,no,两个集合都至少有一人:ans == n,扔一个给另一个集合 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 #in

BestCoder Round #1 1002 项目管理 (HDU 4858)

项目管理 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 738    Accepted Submission(s): 260 Problem Description 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能有多条边,不过一条边的两端必然是不同的节点.每个节点都有一个能量值. 现在我

BestCoder Round #29——A--GTY&#39;s math problem(快速幂(对数法))、B--GTY&#39;s birthday gift(矩阵快速幂)

GTY's math problem Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 0    Accepted Submission(s): 0 Problem Description GTY is a GodBull who will get an Au in NOI . To have more time to learn alg

BestCoder Round #70 Jam&#39;s math problem(hdu 5615)

Problem Description Jam has a math problem. He just learned factorization. He is trying to factorize ax^2+bx+cax?2??+bx+c into the form of pqx^2+(qk+mp)x+km=(px+k)(qx+m)pqx?2??+(qk+mp)x+km=(px+k)(qx+m). He could only solve the problem in which p,q,m,

贪心/二分查找 BestCoder Round #43 1002 pog loves szh II

题目传送门 1 /* 2 贪心/二分查找:首先对ai%=p,然后sort,这样的话就有序能使用二分查找.贪心的思想是每次找到一个aj使得和为p-1(如果有的话) 3 当然有可能两个数和超过p,那么an的值最优,每次还要和an比较 4 注意:不能选取两个相同的数 5 反思:比赛时想到了%p和sort,lower_bound,但是还是没有想到这个贪心方法保证得出最大值,还是题目做的少啊:( 6 */ 7 #include <cstdio> 8 #include <algorithm>