BZOJ 刷题记录 PART 5

拖了好久才写的。

【BZOJ2821】接触分块大法。这道题略有点新颖。首先我们先分块,然后统计每块中每个数出现的个数。

下面是联立各个方块,预处理出第I个方块到第J个方块出现正偶数次数的个数。

for (i=1;i<=s;i++)
  {
    for (j=i;j<=s;j++)
    {
      sum[i][j]=sum[i][j-1];
      for (k=a[j].l;k<=a[j].r;k++)
      {
        temp[data[k]]++;
        if (!(temp[data[k]]&1)) sum[i][j]++;
        else if (temp[data[k]]>1) sum[i][j]--;
      }
    }
    memset(temp,0,sizeof(temp));
  }

其实查询的时候也是和上面类似的。注意统计零散的点时要和已经预处理好的整数块发生关系。

【BZOJ1189】还是比较水的。先二分一个答案,然后拆点构图。

【BZOJ3060】这是想法题。——哈哈,看题解的!首先,一条边上如果两个点的编号都大于K,显然我们不需要删。那么倒着做,先全部拆开,然后先把上述的边加上去(并查集)。遇到连上标号小于等于K的点的边——如果两端都在同一连通块,那么这条边必须删;否则合并连通块。

【BZOJ1306】T到要死!!SKYDEC大爷推荐我做。感觉数据范围还是挺小的,然后就被爆了。首先,有些剪枝是必须加的,比如当前的队伍的分数加上之后比赛*3仍然小于要求的分数就退出等等。

狂T。后来我预处理了一下,用cut[I][J]表示第i个队伍在第J场的时候后面还有属于他的几场。

for (i=1;i<=n;i++)
  {
    for (j=m;j;j--)
      cut[i][j]=cut[i][j+1]+(beat[j].u==i)+(beat[j].v==i);
    for (j=1;j<=m;j++)
      cut[i][j]=cut[i][j+1];
  }

还是T。后来我发现我是枚举到最终才判断所有队是否合法。其实在每一队的最后一场比赛时我们就可以判断了。A。

【BZOJ1832】真是奇怪的LCA。开始用TARJAN的,后来发现最后验证的时候还要LCA!果断转倍增。

【BZOJ2724】分块好题。权限题啦啦啦。

【BZOJ1965】数论还是要好好学。搞了半天总算搞懂了扩欧求解同余方程。

LL extend_gcd(LL a,LL b,LL &x,LL &y)
{
  if (b==0){x=1;y=0;return a;}
  LL temp=extend_gcd(b,a%b,x,y);
  LL t=x;x=y;y=t-a/b*y;return temp;
}
int main()
{
  scanf("%lld%lld%lld",&B,&b,&n);B++;
  A=pow();
  extend_gcd(A,B,x,y);
  x=x*n%B;
  while (x<=0) x+=B;
  while (x>B) x-=B;
  printf("%lld",x);
  return 0;
}

【BZOJ1966】据说是什么AC自动机什么的?反正我直接DP使过了。耶!

【BZOJ1967】我用奇怪的贪心使。(见骗分导论)还打了一个点。

  for (i=1;i<=n;i++)
  {
    t1=(sx>x[i])&&(sy>y[i])&&(sx<x[i]+c[i])&&(sy<y[i]+c[i]);
    t2=(tx>x[i])&&(ty>y[i])&&(tx<x[i]+c[i])&&(ty<y[i]+c[i]);
    if (t1^t2) ans++;
  }

【BZOJ2287】背包。

BZOJ 刷题记录 PART 5

时间: 2024-12-25 05:29:22

BZOJ 刷题记录 PART 5的相关文章

BZOJ 刷题记录 PART 4

[BZOJ1143]CTSC的题目...先用floyed传递闭包,然后直接上匈牙利算法. [BZOJ1452]从未写过的二维树状数组.好像很简单.. struct two_bit { int f[305][305]; inline void add(int x,int z,int A) { for (;x<=n;x+=L(x)) for (int y=z;y<=m;y+=L(y)) f[x][y]+=A; } inline int ask(int x,int z) { int ans=0; f

BZOJ 刷题记录 PART 1

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27109035 一.实体完整性定义 [例1]将Student表中的Sno属性定义为码. CREATE TABLE Student ( Sno CHAR(10) PRIMARY KEY, /*在列定义主码*/ Sname CHAR(20) NOT NULL, Sage SMALLINT ); 或者: CREATE TABLE Student ( Sno CHAR(10

BZOJ 刷题记录 PART 2

[前言]最近感觉状态不错.做题几乎不看题解了.(一群大牛(FZ&WCY)在旁边喷:你刷水题有意思!)但是至少这也是一种进步吧.特别是权限题中有很多思维题. [BZOJ1055]就是一个简单的区间DP.重要代码: for (l=2;l<=L;l++) for (i=1;i<=L-l+1;i++) { j=i+l-1; for (k=0;k<4;k++) for (cut=i;cut<j;cut++) for (p=0;p<4;p++) if (f[i][cut][p])

BZOJ 刷题记录 PART 3

[前言]还是强调要少看题解. [BZOJ1090]简单的区间DP.值得注意的是:在压缩的时候,如果是10个A压缩,那么化成(10)A后有5个字符而不是4个!(我在这里被坑了好长时间!)以下是核心代码: for (len=2;len<=L;len++) for (i=1;i<=L-len+1;i++) { j=i+len-1; for (k=i;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]); for (l=1;l<=len/2;l++

BZOJ 刷题记录 PART 6

[BZOJ2709]水的二分加验证.可是好像被读入萎到了... [BZOJ3229]强大的算法见此.被机房的一堆大神"推荐".于是被坑了...写了一个下午... [BZOJ3631]这道题给我的启发是:要多想想算法. 開始一直在打树链剖分,打到一半忽然在众神犇的提(bi)示(shi)下.发现有O(N)的方法.试想:假设要支持区间改动(加减),最后再查询,能够用什么方法?固然,线段树和树状数组等等都能够,可是最好的显然是类似于前缀和的思想.比方在L~R加上一个数,能够再L处+K.在R+1

[2015.6.28] OI刷题记录

FZSZOJ刷题记录: 1051 砝码称重: DP 多重背包 1058 liqeuer: 序列DP 1061 挖地雷:DP,注意需要倒过来做DP,同时记录路径. 1059 Number:DP 1054 数塔问题:同数字三角形,普通DP 1390 等式问题:爆搜,枚举每个+号或-号的位置 1006 中位数:维护大根堆+小根堆,每次插入调整 1005 Cube Stacking:并查集维护当前在第几个和当前集合的高度,并查集变种. 1073 DNA分子的最佳比对:序列DP 1110 奖学金:傻逼题,

首师大附中科创教育平台 我的刷题记录(3)

首师大附中科创教育平台我的刷题记录(给大家刷11--15题吧) 仅供同学们参考,禁止抄袭!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #include<iostream> #include<math.h> using namespace std; int main() { int x,y; cin>>x; y=abs(x+2); cout<<x*x-y+5<<endl; return 0; } 绝对值函数 #include

【BZOJ做题记录】07.07~?

在NOI一周前重开一个坑 最后更新时间:7.07 11:26 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后面的部分就好了 BZOJ1258: [CQOI2007]三角形tri:在草稿纸上按照位置和边找一下规律就好了 BZOJ1260: [CQOI2007]涂色paint:简单的区间DP BZOJ1303: [CQOI2009]中位数图:小于中位数的改为-1大于的改为1,算一算前缀和然后哈希一下乘一乘就好

首师大附中科创教育平台 我的刷题记录(7)

首师大附中科创教育平台我的刷题记录(这次给大家刷多一点,31--40题吧) 仅供同学们参考,禁止抄袭!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #include<iostream> using namespace std; int main() { int n; cin>>n; if(n%4==0&&n%100!=0||n%400==0) cout<<"yes"<<endl; else cout&