Codeforces Round #368 (Div. 2)

原创 2016年08月29日 15:21:13

C - Pythagorean Triples
题意:如何构造勾股数
设 (a,b,c) 是勾股数,

当 a 为大于 1 的奇数 2n+1 时, b=2n2+2n,c=2n2+2n+1 ,

当 a为大于 4 的偶数 2n 时, b=n2−1,c=n2+1 。

D - Persistent Bookcase
将状态作为节点进行dfs,这样对于操作4就可以很方便的进行统计,详细见:Codeforces Problem 707D Persistent Bookcase(dfs+bitset)

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1010;
const int maxq=100010;
int N,M,Q;
int ans[maxq];
int op[maxq],a[maxq],b[maxq];
vector<int> G[maxq];
bool book[maxn][maxn],rev[maxn];
int num[maxn];
int result;
void dfs(int u){
    int len=G[u].size();
    ans[u]=result;
    for(int i=0;i<len;i++){
        int v=G[u][i],x=a[v],y=b[v];
        int inum=num[x],irev=rev[x];
        int ibook=book[x][y],ires=result;;
        if(op[v]==1 && book[x][y] ^ rev[x] == 0){

            book[x][y] ^=1;
            num[x]++;
            result++;
        } else if(op[v]==2 && book[x][y] ^ rev[x] == 1){
            book[x][y] ^=1;
            num[x]--;
            result--;
        } else if(op[v]==3){
            result+=M-2*num[x];
            num[x]=M-num[x];
            rev[x] ^=1;
        }
        dfs(v);
        num[x]=inum;
        rev[x]=irev;
        book[x][y]=ibook;
        result=ires;
    }
}
int main(){
    freopen("in.txt","r",stdin);
    scanf("%d%d%d",&N,&M,&Q);
    for(int i=1;i<=Q;i++){
        scanf("%d",&op[i]);
        if(op[i]<=2){
            scanf("%d%d",&a[i],&b[i]);
            G[i-1].push_back(i);
        } else if(op[i]==3){
            scanf("%d",&a[i]);
            G[i-1].push_back(i);
        } else {
            scanf("%d",&a[i]);
            G[a[i]].push_back(i);
        }
    }
    dfs(0);
    for(int i=1;i<=Q;i++)printf("%d\n",ans[i]);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Codeforces Round #368 (Div. 2) D. Persistent Bookcase【可持久化线段树,区间取反

可持久化线段树,单点修改区间修改(取反)撤销操作,(伪)区间查询 反正……是个板儿 以前没有写过区间修改的,后来想起似乎pushdown的时候需要把儿子的儿子也接上去(反正就是儿子节点的信息要复制完整...
  • Flaze_
  • Flaze_
  • 2016年08月24日 16:00
  • 221

Codeforces Round #258 (Div. 2)-(A,B,C,D,E)

A:Game With Sticks 水题。。。每次操作,都会拿走一个横行,一个竖行。 所以一共会操作min(横行,竖行)次。 #include #include #include #include ...
  • rowanhaoa
  • rowanhaoa
  • 2014年07月25日 14:39
  • 1476

【解题报告】Codeforces Round #401 (Div. 2)

简略的解题报告。
  • TRiddle
  • TRiddle
  • 2017年02月25日 17:55
  • 412

Codeforces Round #395 (Div. 2)(ABCD)

ps:打完这场cf才知道自己真的很菜,还是停留在AB题的水平,有时候CD其实很简单,但就是想不到,别人一眼看出而我就是想不到,有时候想到了点子上但就是突破不了 题目链接:  Codeforc...
  • qq_34731703
  • qq_34731703
  • 2017年02月03日 12:50
  • 494

Codeforces Round #378 (Div. 2) E. Sleep in Class

链接:http://codeforces.com/contest/733/problem/E 题意:给一个只含'U'和'D'的字符串,U表示向右走,D表示向左走。每个格子踩一次之后翻转(U变D,D变...
  • Fsss_7
  • Fsss_7
  • 2016年11月15日 13:48
  • 359

Codeforces Round #460 (Div. 2) D. Substring(拓扑排序)

题目链接题意:有一个n个点m条边的有向图,每个节点有一个字母,路径的权值是路径上相同字母的最大个数。求最大的路径权值。思路:因为只有26个字母,所以直接假设其中一个字母为相同字母数最大的字母。枚举每一...
  • cyf199775
  • cyf199775
  • 2018年02月01日 13:55
  • 38

Codeforces Round #442 (Div. 2)

A. #include using namespace std; typedef long long ll; int main() { string s; cin >> s; ...
  • Egqawkq
  • Egqawkq
  • 2017年10月24日 02:15
  • 238

Codeforces Round #428 (Div. 2):D. Winter is here(组合数公式)

D. Winter is here time limit per test 3 seconds memory limit per test 256 megabytes input stan...
  • Jaihk662
  • Jaihk662
  • 2017年08月14日 14:52
  • 347

Codeforces Round #460 (Div. 2) D. Substring

题目链接:D. Substring 题目大意 一张有向图,每个结点上有一个字母,定义一条路径的权值为路径中出现次数最多的字母的出现次数,求图中权值最大的路径的权值,如果权值可以无限大,输出-1...
  • litmxs
  • litmxs
  • 2018年01月31日 23:25
  • 66

Codeforces Round #327 (div.2)(A B C D)

codeforces round #327 (div.2)
  • lincifer
  • lincifer
  • 2015年10月26日 13:11
  • 1090
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Codeforces Round #368 (Div. 2)
举报原因:
原因补充:

(最多只允许输入30个字)