• Atcoder 3943 Two Sequences
  • Atcoder 3945 Two Faced Edges

Atcoder 3943 Two Sequences

给两个长度为n的数组a,b,求(a[1]+b[1])^(a[1]+b[2])^...^(a[n]^b[n]).
不能直接暴力,我们逐位考虑.
如果说最终结果的第kkk个二进制位等于1" role="presentation" style="position: relative;">111,则我们首先把a[i],b[j]a[i],b[j]a[i],b[j]模2k+12k+12^{k+1},可以发现这样子并不影响答案.剩下的情况必然存在2k≤a[i]+b[j]<2×2k或3×2k≤a[i]+b[j]<4∗2k2k≤a[i]+b[j]<2×2k或3×2k≤a[i]+b[j]<4∗2k2^k\leq a[i]+b[j].
我们将操作后的b数组排序,对于每一个a[i]a[i]a[i]用二分或者尺取求出符合条件的b[j]b[j]b[j].
这样复杂度是28×log(n)×n28×log(n)×n28\times log(n) \times n.
可是还能优化.我们发现每一次对2k2k2^k取模的时候,只是前面一部分不取,后面一部分取,而且如果从大到小枚举kkk,可以达成每一次后面的数字最多到2k" role="presentation" style="position: relative;">2k2k2^k的两倍,因此bbb数组就是前面一半单调递增,后面一半也单调递增,我们找到中间点进行一次归并排序,复杂度为O(n)" role="presentation" style="position: relative;">O(n)O(n)O(n).如果再用尺取法优化,就可以使复杂度减小到O(n×28).O(n×28).O(n\times 28).

#include<bits/stdc++.h> //Ithea Myse Valgulious
namespace chtholly{
typedef long long ll;
#define re0 register int
#define rec register char
#define rel register ll
#define gc getchar
#define pc putchar
#define p32 pc(' ')
#define pl puts("")
/*By Citrus*/
inline int read(){int x=0,f=1;char c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return f?x:-x;}
template <typename mitsuha>
inline bool read(mitsuha &x){x=0;int f=1;char c=gc();for (;!isdigit(c)&&~c;c=gc()) f^=c=='-';if (!~c) return 0;for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return x=f?x:-x,1;}
template <typename mitsuha>
inline int write(mitsuha x){if (!x) return 0&pc(48);if (x<0) x=-x,pc('-');int bit[20],i,p=0;for (;x;x/=10) bit[++p]=x%10;for (i=p;i;--i) pc(bit[i]+48);return 0;}
inline char fuhao(){char c=gc();for (;isspace(c);c=gc());return c;}
}using namespace chtholly;
using namespace std;
const int yuzu=2e5;
typedef ll fuko[yuzu|10];
fuko a,b;int n;void merge_sort(ll *a,ll mod){
int pos=n+1,i;
for (i=1;i<=n;++i){if (pos>n&&a[i]>=mod) pos=i;a[i]&=mod-1;}inplace_merge(a+1,a+pos,a+n+1);
}int get(ll x){
ll ans=0;int i,kp=n;
for (i=1;i<=n;++i){for (;kp>0&&a[i]+b[kp]>=x;--kp);ans+=n-kp; }return ans&1;
}int main(){
int i,j;
for (int t=1,zxy=0;t--;){n=read();for (i=1;i<=n;++i) read(a[i]);for (i=1;i<=n;++i) read(b[i]);sort(a+1,a+n+1),sort(b+1,b+n+1);ll ans=0;for (i=61;~i;--i){merge_sort(a,2ll<<i),merge_sort(b,2ll<<i);ans|=(get(1ll<<i)^get(2ll<<i)^get(3ll<<i))<<i;}//printf("Case #%d: ",++zxy);write(ans),pl;}
}

此题原题hdu5270大家可以试着交一下.

Atcoder 3945 Two Faced Edges

给一张有向图,求每一条边反转之后会不会引起强连通分量个数的变化.
一看就知道显然这是一道瞎搞题.
那么对于每一条边所连的两个点u→vu→vu\to v来说,同时满足或者同时不满足以下两个条件时,不会引起强连通分量个数的变化.
1.u不经过这条边也能到达v.
2.v可以到达u.

对于第2个条件,我们O(n×m)O(n×m)O(n\times m)进行nnn次dfs" role="presentation" style="position: relative;">dfsdfsdfs即可.
而第一个条件怎么办?
我们先正过来dfsdfsdfs,对能够dfsdfsdfs到的点编上不同的号,然后再倒过来dfsdfsdfs,判断两次dfsdfsdfs编到的号是否是相等的,如果相等则uuu只能通过这条边到达v" role="presentation" style="position: relative;">vvv.
接下来把mm<script type="math/tex" id="MathJax-Element-2257">m</script>条边存下来都跑一遍就可以了.

#include<bits/stdc++.h> //Ithea Myse Valgulious
namespace chtholly{
typedef long long ll;
#define re0 register int
#define rec register char
#define rel register ll
#define gc getchar
#define pc putchar
#define p32 pc(' ')
#define pl puts("")
/*By Citrus*/
inline int read(){int x=0,f=1;char c=gc();for (;!isdigit(c);c=gc()) f^=c=='-';for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return f?x:-x;}
template <typename mitsuha>
inline bool read(mitsuha &x){x=0;int f=1;char c=gc();for (;!isdigit(c)&&~c;c=gc()) f^=c=='-';if (!~c) return 0;for (;isdigit(c);c=gc()) x=(x<<3)+(x<<1)+(c^'0');return x=f?x:-x,1;}
template <typename mitsuha>
inline int write(mitsuha x){if (!x) return 0&pc(48);if (x<0) x=-x,pc('-');int bit[20],i,p=0;for (;x;x/=10) bit[++p]=x%10;for (i=p;i;--i) pc(bit[i]+48);return 0;}
inline char fuhao(){char c=gc();for (;isspace(c);c=gc());return c;}
}using namespace chtholly;
using namespace std;
const int yuzu=2e5;
typedef int fuko[yuzu|10];
fuko u,v;int vis[2][yuzu>>6][yuzu>>6];
vector<int> lj[yuzu|10];void dfs(int id,int p,int u,int col){
if (vis[id][p][u]) return;
vis[id][p][u]=col;
for (int i:lj[u]) dfs(id,p,i,col);
}int main(){
int i,n=read(),m=read();
for (i=1;i<=m;++i){u[i]=read(),v[i]=read();lj[u[i]].push_back(v[i]);}
for (i=1;i<=n;++i){vis[0][i][i]=vis[1][i][i]=1;int now=0;for (int j:lj[i]) dfs(0,i,j,++now);if (lj[i].size()) for (int j=lj[i].size()-1;~j;--j) dfs(1,i,lj[i][j],j+1);}
for (i=1;i<=m;++i){puts((vis[0][u[i]][v[i]]!=vis[1][u[i]][v[i]])^(vis[0][v[i]][u[i]]>0)?"diff":"same");}
}

谢谢大家.

Atcoder Regular Contest 92 D Two Sequences F Two Faced Edges 两道神题相关推荐

  1. AtCoder Regular Contest 065

    AtCoder Regular Contest 065 C - Daydream Score : 300300300 points 倒着来就行了,正着来会产生歧义匹配,dreamer,dreamdre ...

  2. NOMURA Programming Contest 2021(AtCoder Regular Contest 121)

    文章目录 A - 2nd Greatest Distance B - RGB Matching C - Odd Even Sort D - 1 or 2 E - Directed Tree F - L ...

  3. AtCoder Regular Contest 100 D - Equal Cut 思维 + 前缀和

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,你要将其分成四份,让这四份中和的最大值−-−最小值最小,输出这个最小值. n≤2e5,ai≤1e9n\le2e5,a_i\le1e9n≤2 ...

  4. AtCoder Regular Contest 100 E - Or Plus Max Sos dp

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为2n2^n2n的数组,让你对于所有的1≤k≤2n−11\le k\le 2^n-11≤k≤2n−1求最大的ai+aj,0≤i<j≤2n−1 ...

  5. AtCoder Regular Contest 061 E - Snuke‘s Subway Trip(建图 + dijkstra最短路 / 0/1bfs / 并查集)

    AtCoder Regular Contest 061 E - Snuke's Subway Trip problem 洛谷翻译 my idea 最近一直在做网络流,所以一读这题后,我就想到了最小费用 ...

  6. AtCoder题解——AtCoder Regular Contest 107——B - Quadruple

    题目相关 题目链接 AtCoder Regular Contest 107 B 题,https://atcoder.jp/contests/arc107/tasks/arc107_b. Problem ...

  7. AtCoder Beginner Contest 197 题解(A ~ F)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...

  8. AtCoder Regular Contest 092 Two Sequences AtCoder - 3943 (二进制+二分)

    Problem Statement You are given two integer sequences, each of length N: a1,-,aN and b1,-,bN. There ...

  9. AtCoder Regular Contest 067 F - Yakiniku Restaurants

    题意: 有n个餐厅排成一排,第i个与第i+1个之间距离是Ai. 有m种食物,每种食物只能在一个餐厅里吃,第j种食物在第i个餐厅里吃的收益是$b[i][j]$. 选择每种食物在哪个餐厅里吃,使收益减去走 ...

最新文章

  1. blob 图片_《你不知道的 Blob》番外篇
  2. 去雾综述_【综述】图像去雾的前世今生
  3. BZOJ 2653 middle
  4. .net的页面在大并发下偶尔出现503错误
  5. android 的a标签,Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)...
  6. JavaScript基础和Web APIs两个阶段的关联性(1)
  7. java命令行参数args_Args4J (Java 命令行参数控制开源项目) 使用指南
  8. Spring框架(IoC、AOP面向接口切面)
  9. 解决win10系统俄罗斯精简版用不了打印机问题
  10. jic标准_JIC螺纹技术资料.doc
  11. P问题、NP问题、NPC问题、NP hard问题
  12. 余世伟视频笔记----如何塑造管理者的性格魅力领袖根性之诚信和担当
  13. 读完这100篇论文 就能成大数据高手
  14. java飞机代码_java实现飞机游戏代码
  15. 前端视觉测试工具:Applitools Eyes
  16. mysql 表情符串_mysql支持emoji表情符存储
  17. 计算机组成原理:运算器组成实验(.八位串行可控加减法器等)
  18. 使用Python处理声音文件(三):剪辑与淡入淡出
  19. java整合支付宝遇到的坑及解决方法
  20. 学习笔记:曲线插值法

热门文章

  1. java jsr305_Java | FindBugs JSR305 与 Guava Preconditions
  2. js对url进行编码解码(三种方式)
  3. 读书笔记——《指标陷阱》
  4. pyqt实现简单的图像数据标注
  5. 嘉立创PCB打样不是5元而是23元?
  6. Axure RP9教程 常用函数
  7. ubuntu-14.04 源码安装cntk笔记
  8. 牛客练习赛67-A、牛牛爱字符串
  9. 有哪些比较精准的海关数据
  10. DreamMail无法登录Gmail的SMTP发送邮件的解决办法