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;
}
```

最新文章

  1. qt 定时器
  2. .NET 中Barcode Library的应用二
  3. PetaPoco 批量插入数据
  4. 在php中防止SQL注入的方法
  5. You and Your Research(Chinese)
  6. jps命令
  7. XBox360-双光盘游戏自制GOD
  8. lintcode : 空格替换
  9. python中的单向链表实现
  10. IPhone微信H5用Video标签播放不了视频
  11. [C++]动态规划系列之Warshall算法
  12. PAT 乙级 1065 单身狗 (25 分)
  13. Python学习笔记-常用内置函数
  14. MVC| 路由测试代码
  15. MySQL 先按某字段分组,再取每组中前N条记录
  16. 关于 error C2001: 常量中有换行符
  17. s12-day04-work01 简单计算器功能实现
  18. 自从教学弟学会了Python,他每天都爬一些好不正经的图片!
  19. scp出现ssh port 22: Connection refused 问题解决具体步骤
  20. Javascript闭包演示【转】

热门文章

  1. Numpy | 15 数学函数
  2. 判断一个数是否能整开方,perfect square
  3. 60: noi.ac #69
  4. .net web.config中配置字符串中特殊字符的处理
  5. dplyr
  6. attempt to call method 'getDataString' (a nil value)
  7. 表格样式、表格css、
  8. enable device: BAR 0 [mem 0x00000000-0x003fffff] not claimed
  9. NIO网络编程
  10. Oracle 行转列 动态出转换的列