AtCoder-abc147 (题解)
A - Blackjack (水题)
大致思路:
水题
B - Palindrome-philia (水题)
大致思路:
由于整个串是回文串,只要判断前一半和后一半有多少个不同即可
C - HonestOrUnkind2 (暴力)
大致思路:
\(N\) 只有15,直接枚举出所有的情况 \(2^N\) 种,对每一种方案判断合法性即可,只要找诚实的人来判断。
点击展开代码
```c++
#include
using namespace std;
vectorx[20],y[20];
int n;
int js(int x){
int ans=0;
while(x){
ans+=(x&1);
x>>=1;
}
return ans;
}
bool check(int X){
int temp[20]={0};
for(int i=1;i>(i-1))&1)temp[i]=1;
else temp[i]=0;
}
for(int i=1;i
D - Xor Sum 4 (按位计算)
题目大意:
给定 \(n\) 个数字,要求求出 \(\sum^{n-1}_{i=1}\sum^{n}_{j=i+1}a_i\ xor\ a_j\)
大致思路:
我们将每一位单独计算贡献,比如讨论第 \(i\) 位,那么把 \(n\)个数字的第 \(i\) 位取出来,\(b_1,b_2,...,b_n\) 那么对于\(b_j\) 如果是 \(0\) ,那么能 \(xor\) 为 \(1\) 的个数为 \([j+1,n]\) 的 \(1\) 的个数。最后把所有计算 \(1\) 的个数相加\(*2^i\) ,那么这就是该位对答案的贡献了。复杂度为 \(O(n*60)\)
点击展开代码
```cpp
#include
#define ll long long
using namespace std;
const int N=3e5+10;
const int mod=1e9+7;
ll a[N],p[N];
ll sum[N];
int n;
int main()
{
//freopen("H:\\c++1\\in.txt","r",stdin);
//freopen("H:\\c++1\\out.txt","w",stdout);
p[0]=1;
for(int i=1;i>i)&1)sum[j]=sum[j-1]+1;
else sum[j]=sum[j-1];
}
ll cnt=0;
for(int j=1;j>i)&1){
cnt+=(n-j-(sum[n]-sum[j]));
}else{
cnt+=(sum[n]-sum[j]);
}
}
cnt%=mod;
ans=(ans+(1ll*cnt*p[i]%mod))%mod;
}
printf("%lld\n",ans);
return 0;
}
```
E - Balanced Path (DP)
题目大意:
给一个矩阵,每一个位置有两个数字,现在从左上走到右下,每次将位置的两个数字一个标记红色,一个标记蓝色,问 \(红色数字蓝色数字|\sum{红色数字}-\sum{蓝色数字}|\) 最小是多少
大致思路:
感觉就很像 \(dp\) ,用 \(dp[i][j][k]\) 表示走到 \((i,j)\) ,对于差值为 \(k\) 能否得到,假设当前走到 \((i,j)\) ,两个数字的差值为 \(cha=|a_{ij}-b_{ij}|\) 那么状态转移就是
\(dp[i][j][k\pm cha]=dp[i-1][j][k]\ if(dp[i-1][j][k]=True)\)
\(dp[i][j][k\pm cha]=dp[i][j-1][k]\ if(dp[i][j-1][k]=True)\)
可以用bitset来优化
代码:
点击展开代码
```c++
#include
#define inf 0x3f3f3f3f
using namespace std;
const int N=100;
const int M=6401;
const int Y=6400;
bitset dp[N][N];
int n,m;
int a[N][N],b[N][N];
int main()
{
//freopen("H:\\c++1\\in.txt","r",stdin);
//freopen("H:\\c++1\\out.txt","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i>cha));
dp[i][j]|=((dp[i][j-1]>cha));
}
int ans=inf;
for(int i=0;i
F - Sum Difference (数学)
题目大意:
给一个 \(n\) 个数的等差数列,首项为 \(x\) ,公差为 \(d\) ,现在在数列中选择 \(k\) 个数,设计 \(S\) 为 \(k\) 个数的和, \(T\) 为剩下 \(n-k\) 的数的和。为共有多少个 \(S-T\) 的值。
大致思路:
假设所有数字之和为 \(sum\) ,那么 \(S-T=S-(sum-S)=2*S-sum\) ,那么其实就是求 \(S\) 的不同值的个数。假设 \(S=k*x+m*d\) ,其中 \(k\) 就是选择的数的个数, \(m\) 是一个值, \(m\) 应该在 \([0+1+...+k-1,n-k+n-(k+1)+...+n-1]\) 的范围之内。那么对于一个 \(k\) 值, \(S\) 的值就是在一个 \([L,R]\) 中,然后每一个数字间隔 \(d\) ,而且这些值 \(S\%d\) 都是相等的。那么我们就对所有的 \(S\) 用 \(d\) 将它们分成一个剩余系,不同剩余类中的元素是不会相等的,决定其位于哪个剩余类是 \(k*x\%d\) 的值。为了得到每一个剩余类的元素个数,我们将S/d,那么就会得到许多的区间,按照k*x%d分类,对于每一个类将区间排序,合并,计算即可。
感觉比较抽象,具体来说就是,一个模d余0剩余类中的数字为 \(,,,,x,x+d,x+2*d,x+3*d,...\) ,那么一个模d余1剩余类的数字为 \(,,,x+1,x+1+d,x+1+2*d,....\) ,那么我们就对每一个剩余类来求解。
代码:
点击展开代码
```c++
#include
#define fi first
#define se second
#define ll long long
using namespace std;
const int N=2e5+10;
struct node{
ll l,r;
bool operator >s;
ll n,x,d;
ll sum[N];
int main()
{
//freopen("H:\\c++1\\in.txt","r",stdin);
//freopen("H:\\c++1\\out.txt","w",stdout);
for(int i=1;iR){
ans+=R-L+1;
L=v.l,R=v.r;
}
else{
R=max(v.r,R);
}
}
ans+=R-L+1;
}
printf("%lld\n",ans);
return 0;
}
```
AtCoder-abc147 (题解)的更多相关文章
- AtCoder ExaWizards2019题解
AtCoder ExaWizards2019题解 AtCoder (因为代码直接用模板写的,可能有点冗长) A.Regular Triangle 给你三根棍子的长度,问你能否用他们组成等边三角形. 什 ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- AT2370 Piling Up
https://www.luogu.org/jump/atcoder/2370 题解 答案不是\(2^{2m}\)因为每轮的第一次取球可能会不够. 我们可以设\(dp[i][j]\)表示到了第\(i\ ...
- Triple Shift
来源:Atcoder ARC 136 B - Triple Shift (atcoder.jp) 题解:这道题我们不可能去硬模拟(大多数这种题都不能这样去模拟的),然后我们就要去发现特性, 发现把 a ...
- 重修 Slope Trick(看这篇绝对够!)
Slope Trick 算法存在十余载了,但是我没有找到多少拍手叫好的讲解 blog,所以凭借本人粗拙的理解来写这篇文章. 本文除标明外所有图片均为本人手绘(若丑见谅),画图真的不容易啊 qwq(无耻 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder ExaWizards 2019 简要题解
AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...
- AtCoder Grand Contest 017 题解
A - Biscuits 题目: 给出 \(n\) 个物品,每个物品有一个权值. 问有多少种选取方式使得物品权值之和 \(\bmod\space 2\) 为 \(p\). \(n \leq 50\) ...
- AtCoder Regular Contest 077 被虐记&题解
直到\(7:58\)才知道今天\(8:00\)有\(AtCoder\)的菜鸡来写题解啦. C - pushpush 题目: 给定一个长为\(n\)的序列,第\(i\)次操作做如下的事 : 将\(a_i ...
- AtCoder Beginner Contest 115 题解
题目链接:https://abc115.contest.atcoder.jp/ A Christmas Eve Eve Eve 题目: Time limit : 2sec / Memory limit ...
随机推荐
- 洛谷P1979华容道
题目 此题目中存在三种棋盘的放置方法(空白,不能活动,能活动). 而每次变化的格子一定在当前空白格子的周围,因此只需要对空白格子的周围四个状态考虑即可,因此我们设\(a[i][j][k]\)为白格子在 ...
- map访问key不存在的情况下,用find。比[]直接访问的意思不一样,map[key]不返null
key不存在的话则创建一个pair并调用默认构造函数 map<CGuid, CLibItem>::iterator iterItem = m_world->m_library_sce ...
- 2019-09-16 16:42:03.621946: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA Traceback (most recent cal
-- ::] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA ...
- 关于 ElementUI 通知组件 notification 重叠问题的解决方案
转载链接:https://blog.csdn.net/csdn_yudong/article/details/101271214 ElementUI 通知组件(notification) 多个时会重叠 ...
- Maven 项目中依赖的搜索顺序
Maven 项目中依赖的搜索顺序 http://www.manongjc.com/article/13422.html 执行过程中使用 -e -X 查看详细的搜索地址: 1,中央仓库,这是默认的仓库 ...
- 三句话看明白jdk收费吗
对于从oracle下载的jdk8:JDK8u200(含)以下版本不收费. 对于从oracle下载的jdk11:JDK 11.0.0不收费,JDK 11.0.1不收费. 对于openjdk:免费 ——— ...
- Ubuntu 安装最新版 (1.12) Golang 并使用 go mod
wget https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz sudo tar -zxvf go1.12.4.linux-amd64.tar.gz ...
- 大数据常见端口汇总-hadoop、hbase、hive、spark、kafka、zookeeper等(持续更新)
常见端口汇总:Hadoop: 50070:HDFS WEB UI端口 8020 : 高可用的HDFS RPC端口 9000 : 非高可用的HDFS RPC端口 8088 ...
- vue-cli webpack打包开启Gzip 报错—— Cannot find module 'compression-webpack-plugin
异常描述: 复用以前框架,打包的时候报异常提示: Cannot find module 'compression-webpack-plugin" 然后安装插件: npm install -- ...
- 008-linux shell vim使用
一.概述 vi: Visual Interface 可视化接口 vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式) 输入模式 末行模式 模式转换 ...