博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #149 (Div. 2)【AK】
阅读量:4309 次
发布时间:2019-06-06

本文共 5783 字,大约阅读时间需要 19 分钟。

吐槽:比赛刚开始codeblocks出了点问题。。边看题边弄编译器。。。囧。。

    D居然一直没看。。因为E题意好懂。。然后sb地卡了一场E。。。战斗力太不稳定。。。

A...

A
1 #include
2 #include
3 #include
4 #define N 100010 5 using namespace std; 6 int ans[N][2]; 7 int main(){ 8 int x,y,a,b; 9 while(cin>>x>>y>>a>>b){10 int cnt=0;11 for(int i=a;i<=x;i++){12 for(int j=b;j
<=y;j++){13 ans[++cnt][0]=i;14 ans[cnt][1]=j;15 }16 }17 cout<
<

B....

B
1 #include
2 #include
3 #include
4 #define N 100010 5 using namespace std; 6 struct S{ 7 int l,r,len,id; 8 }s[N]; 9 bool cmp(S a,S b){10 return a.len>b.len;11 }12 int main(){13 int n;14 while(cin>>n){15 int ll=(1<<30),rr=-1;16 for(int i=1;i<=n;i++){17 cin>>s[i].l>>s[i].r;18 s[i].len=s[i].r-s[i].l+1;19 s[i].id=i;20 ll=min(ll,s[i].l);21 rr=max(rr,s[i].r);22 }23 sort(s+1,s+1+n,cmp);24 if(s[1].len==(rr-ll+1))25 cout<
<

C.想了半天也不会。。知道是bfs,但是1e9的范围太尼玛大了。。然后看了下师傅代码。。神奇的map....Orz

C
1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 typedef long long ll; 7 const ll N=(ll)1e9; 8 ll sx,sy,ex,ey; 9 ll fun(ll x,ll y){10 return N*(x-1)+y;11 }12 map
M;13 int move[8][2]={
{
0,-1},{
0,1},{-1,0},{
1,0},{
1,1},{
1,-1},{-1,-1},{-1,1}};14 ll solve(){15 queue
Q[3];16 Q[0].push(sx);17 Q[1].push(sy);18 Q[2].push(0);19 M[fun(sx,sy)]=-1;20 while(!Q[1].empty()){21 ll x=Q[0].front();Q[0].pop();22 ll y=Q[1].front();Q[1].pop();23 ll step=Q[2].front();Q[2].pop();24 if(x==ex&&y==ey)return step;25 for(int i=0;i<8;i++){26 ll xx=x+move[i][0];27 ll yy=y+move[i][1];28 if(xx<1||xx>N||yy<1||yy>N)continue;29 if(M[fun(xx,yy)]!=1)continue;30 Q[0].push(xx);31 Q[1].push(yy);32 Q[2].push(step+1);33 M[fun(xx,yy)]=-1;34 }35 }36 return -1;37 }38 int main(){39 int m;40 while(cin>>sx>>sy>>ex>>ey){41 M[fun(sx,sy)]=1;42 M[fun(ex,ey)]=1;43 cin>>m;44 M.clear();45 int cnt=0;46 for(int i=1;i<=m;i++){47 ll r,a,b;48 cin>>r>>a>>b;49 for(ll j=a;j<=b;j++){50 if(M[fun(r,j)]!=1)51 M[fun(r,j)]=1;52 }53 54 }55 cout<
<

D.解法:贪心。。。如果当前节点的值是最后不想要的,那么就press一下,因为被press之后就再也不可能回到原来的值了。。。

  尼玛。。比赛的时候看都没看。。。

D
1 #include
2 #include
3 #include
4 #include
5 #include
6 #define N 100010 7 using namespace std; 8 vector
V[N]; 9 int s[N];10 int x[N],ans[N];11 bool used[N];12 int c;13 void dfs(int rt){14 for(int i=0;i
>n>>m){28 memset(s,0,sizeof(s));29 c=0;30 memset(used,0,sizeof(used));31 for(int i=1;i<=n;i++)V[i].clear();32 for(int i=1;i<=m;i++){33 int a,b;34 cin>>a>>b;35 V[a].push_back(b);36 V[b].push_back(a);37 }38 for(int i=1;i<=n;i++)cin>>x[i];39 int w;40 for(int i=1;i<=n;i++){41 if(s[i]==x[i]){42 s[i]++;43 dfs(i);44 ans[++c]=i;45 }46 }47 cout<
<

E.线段树维护即可。。。拆位。。。

  统计每个区间每个二进制位上出现的1的个数。。最后求和的时候加一遍就行。。。异或相当于把这个数位上所以的1变成0.。。0变成1

E
1 #include
2 #include
3 #include
4 #include
5 #define N 100010 6 #define lson l,m,n<<1 7 #define rson m+1,r,n<<1|1 8 using namespace std; 9 typedef long long ll; 10 ll s[N<<2][30]; 11 ll flag[N<<2]; 12 ll ans; 13 void pushup(int n){ 14 for(int i=0;i<30;i++){ 15 s[n][i]=s[n<<1][i]+s[n<<1|1][i]; 16 } 17 } 18 void pushdown(int n,int m){ 19 if(flag[n]){ 20 flag[n<<1]^=flag[n]; 21 flag[n<<1|1]^=flag[n]; 22 int f=flag[n]; 23 for(int i=0;i<30;i++){ 24 if(f&1){ 25 s[n<<1][i]=m-(m>>1)-s[n<<1][i]; 26 s[n<<1|1][i]=(m>>1)-s[n<<1|1][i]; 27 } 28 f>>=1; 29 } 30 flag[n]=0; 31 } 32 } 33 void build(int l,int r,int n){ 34 memset(s[n],0,sizeof(s[n])); 35 flag[n]=0; 36 if(l==r){ 37 int a; 38 cin>>a; 39 for(int i=0;i<30;i++){ 40 if(a&1)s[n][i]=1; 41 a>>=1; 42 } 43 return ; 44 } 45 int m=(l+r)>>1; 46 build(lson); 47 build(rson); 48 pushup(n); 49 50 } 51 void update(int ll,int rr,int x,int l,int r,int n){ 52 if(ll==l&&rr==r){ 53 flag[n]^=x; 54 for(int i=0;i<30;i++){ 55 if(x&1)s[n][i]=(r-l+1)-s[n][i]; 56 x>>=1; 57 } 58 return ; 59 } 60 pushdown(n,r-l+1); 61 int m=(l+r)>>1; 62 if(rr<=m) 63 update(ll,rr,x,lson); 64 else if(ll>m) 65 update(ll,rr,x,rson); 66 else 67 update(ll,m,x,lson),update(m+1,rr,x,rson); 68 pushup(n); 69 } 70 void query(int L,int R,int l,int r,int n){ 71 if(L==l&&R==r){ 72 for(int i=0;i<30;i++) 73 ans+=s[n][i]*(1LL<
>1; 78 if(R<=m)query(L,R,lson); 79 else if(L>m)query(L,R,rson); 80 else query(L,m,lson),query(m+1,R,rson); 81 } 82 int main(){ 83 int n,m; 84 int op,l,r,x; 85 while(cin>>n){ 86 build(1,n,1); 87 cin>>m; 88 while(m--){ 89 cin>>op; 90 if(op==1){ 91 cin>>l>>r; 92 ans=0; 93 query(l,r,1,n,1); 94 cout<
<
>l>>r>>x; 97 update(l,r,x,1,n,1); 98 } 99 }100 }101 return 0;102 }

 

转载于:https://www.cnblogs.com/silver-bullet/archive/2012/11/12/2766192.html

你可能感兴趣的文章
使用开源软件 jumpserver 搭造自己的堡垒机
查看>>
[报错解决] "MySQL server has gone away" 解决思路
查看>>
http状态码-备查
查看>>
iptables一些练习
查看>>
常用命令备忘 xargs
查看>>
关于nginx反代jenkins报错 反向代理设置有误
查看>>
关于Ubuntu中snap安装软件太慢解决办法
查看>>
esp8266 + dht11 + 两路继电器 实现pc远程控制开关机温度监控.并配置zabbix监控
查看>>
在linux中设置优先使用ipv4,而不是ipv6
查看>>
谷歌浏览器离线安装包下载
查看>>
正则表达式
查看>>
AWK命令使用
查看>>
Redis项目实战---应用及理论(三)---Jedis使用
查看>>
Redis项目实战--应用及理论(一)--redis基础
查看>>
Redis项目实战---应用及理论(二)---Redis集群原理
查看>>
VMware vSphere API开发(一)---vSphere 体系核心概念
查看>>
java String 的比较
查看>>
将String数字字符转为整型
查看>>
【转】 Java中equals和==的区别
查看>>
idea导入maven项目时需要注意
查看>>