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 ...
随机推荐
- ubuntu中使用 alien安装rpm包
我们可以使用alien 在ubuntu中安装rpm 包 使用方法: 安装 alien 安装 apt-get update apt-get install alien 帮助命令 Usage: ali ...
- fpm 打包跨平台rpm 包的一个问题
平时我们开发机器可能使用的是mac 系统,但是部署机器kennel是linux,默认会有一个操作系统的问题, 我们可以在打包的时候指定os版本信息 参考 --rpm-os linux 参考例子 一个构 ...
- JS的ES6的iterator
一.iterator 1.概念:iterator是一种接口机制,为各种不同的数据结构提供统一的访问机制. 2.作用: 为各种数据结构,提供一个统一的.简便的访问接口: 使得数据结构的成员能够按某种次序 ...
- JS线程机制与事件机制
JS线程机制与事件机制 1.进程与线程 (1).定义: 进程:程序的一次执行,它占有一片独有的内存空间 CPU的基本调度单位,是程序执行的一个完整的流程 (2).进程与线程的关联 一个进程一般至少有一 ...
- 2.学习SpringMVC注解入门篇
一.SpringMVC执行流程 . 二.创建项目学习SpringMVC注解 按照我之前的SpringMVC创建项目,首先创建一个项目springmvc01,配置好pom.xml,web.xml,spr ...
- JS中的let变量和var变量的区别
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]; let允许你声明一个作用域被限制在块级中的变量.语句或者表达式.在F ...
- Linux下的C++ socket编程实例
阅读目录 基本的局域网聊天 客户端服务端双向异步聊天源码 局域网内服务端和有限个客户端聊天源码 完美异步聊天服务端和客户端源码 C++定时器 select异步代码 pthead多线程 服务端: 服务器 ...
- HHHOJ #151. 「NOI模拟 #2」Nagisa
计算几何板子题(我才没有拷板子的说--) 众所周知,三角形的重心坐标是\((\frac{x_1+x_2+x_3}{3},\frac{y_1+y_2+y_3}{3})\) 然后我们发现如果我们有一个点集 ...
- 安装和启动ElasticSearch服务遇到的几个问题
首先安装和启动服务的教程是参考文章:ES入门之一 安装ElasticSearch 然后在最后的启动es服务时遇到了几个小问题,因此在这里记录一下. 因为我对linux并不是很熟悉,因此文中如果有说错的 ...
- 【NWJS】解析node-webkit(NWJS)的打包和发布
目录结构: contents structure [-] 下载和安装node-webkit 建立一个简单的WEB应用 生成EXE可执行文件 修改icon 封包 Enigma Virtual Box I ...