【BestCoder #44】
因为这场比赛,我愉快地逃掉了晚自修。
T1一开始各种SillyB,忘了40%的最低限制。。。
T2各种想吐槽。。。
明明OJ警告说%lld是不行的我就换成%I64D(上面写这样的)。。。
结果各种WA
改成%lld然后不顾警告提交
AC。。。
此时心里:“¥%……#¥……”
后来想了想不是%I64d吗。。。。d是小写的啊。。。。
BC的尿性。。。。
累觉不爱
T3和T4就都不会做啦。。。
于是只能A两道,于是100+的排名,于是Rating也上1500了(噗
代码:
T1
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <deque>
#include <cmath>
#define rep(i, l, r) for(int i=l; i<=r; i++)
#define down(i, l, r) for(int i=l; i>=r; i--)
#define clr(x, c) memset(x, c, sizeof(x))
#define travel(x) for(edge *p=fir[x]; p; p=p->n)
#define maxn 50009
#define maxm 300009
#define inf 0x7fffffff
#define ll long long
using namespace std;
int read()
{
int x=0, f=1; char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();
return x*f;
} int main()
{
int t=read(), tt=0, a, b, ans; while (tt++<t)
{
ans=0;
a=read(); b=read();
ans+=max(1000*(250-a)/250-b*50, 1000/10*4);
a=read(); b=read();
ans+=max(1500*(250-a)/250-b*50, 1500/10*4);
a=read(); b=read();
ans+=max(2000*(250-a)/250-b*50, 2000/10*4);
a=read(); b=read();
ans+=max(2500*(250-a)/250-b*50, 2500/10*4);
printf("Case #%d: %d\n", tt, ans);
}
return 0;
}
T2
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#define rep(i, l, r) for(int i=l; i<=r; i++)
#define down(i, l, r) for(int i=l; i>=r; i--)
#define maxn 500009
#define Q 998244353
#define ll long long
using namespace std;
int read()
{
int x=0, f=1; char ch=getchar();
while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();
return x*f;
}
int n;
ll k[maxn], ans;
bool cmp(ll x, ll y)
{
if (x==y) return true;
while ((x&1)==(y&1)) x>>=1, y>>=1;
return (x&1)==0;
}
void Cal(ll l, ll r, ll v)
{
if (l>=r || v==1073741824) return;
ll mid=l; while (mid<=r && (k[mid]&v)==0) mid++;
ans=(ans+(mid-l)*(r+1-mid)%Q*v%Q)%Q;
Cal(l, mid-1, v<<1); Cal(mid, r, v<<1);
}
int main()
{
int t=read(), tt=0; while (tt++<t)
{
n=read(); ans=0;
rep(i, 1, n) k[i]=read();
sort(k+1, k+1+n, cmp);
Cal(1, n, 1);
printf("Case #%d: %lld\n", tt, ans*2%Q);
}
return 0;
}
题解:
1001 ZYB loves Score
本题考察了选手的模拟能力,直接按照题目意思计算即可1002 ZYB loves Xor I
我们考虑,当A xor B的答案为2p时,A和B表示成二进制数后末p−1位肯定相同
于是我们维护一颗字母树,将每个数表示成二进制数后翻转可以下,插入字母树
统计答案时,我们找出Ai的二进制数翻转后在字母树上的路径,对于路径上每个点x,设他走的边是v,且当前为第k位,则和他xor后lowbit为2k的数的个数为trans(x,v^1)的子树大小。
trans(x,v)表示字母树上在结点x,走连出去的字母为v的边到达的结点
时间复杂度:O(nlogA)1003 ZYB loves Xor II
我们考虑两个数A,B。
为了描述方便,我们设[P]的值为:当表达式P的值为真时,[P]=1,否则[P]=0
我们现在考虑计算[(A+B)and(2i)>0]
首先我们将A,B都对2i+1取模,显然这样是不会影响答案的
则有一个十分显然的等式:
[(A+B)and(2i)>0]=[(A+B)≥(2i)]−[(A+B)≥(2i+1)]+[(A+B)≥(3∗2i)]
这个式子相当容易理解,这里不多述了
考虑每一位对答案的贡献是独立的,我们每一位分开做
于是现在问题变成了:给定数组A,B,求满足Ai+Bj≥limit的数对个数
我们可以将A,B排序后,直接O(n)计算即可
然而排序是O(nlogn)的,这样总复杂度就是O(nlognlogA)了,无法通过此题
于是这里有个小技巧
我们从高位往低位做,现在我们要实现的是:将A中每个数对P取模后将A排序
我们发现A会被分成两段,一段小于P,一段大于等于P,只有后面一段要取模,我们可以取模后直接将这两段归并,复杂度是O(n)的
时间复杂度:O(nlogA+nlogn)1004 ZYB loves product
个人感觉这题没有上一题难
首先我们考虑DP思路,设f[k][n]为n的k分解的权值和
则有f[k][n]=∑d|nf[k−1][d]∗V(nd)
我们可以发现上述DP方程是个狄利克雷卷积的形式
然后我们可以发现权值函数V(x)是积性函数
所以易得f[k]也是个积性函数
于是我们把n质因数分解
现在把n的规模变成了ap
设g[k][p]=f[k][ap]
设h[p]=V(ap)
于是我们可以得到转移方程g[k][n]=∑ni=0g[k−1][i]∗h[n−i]
这是个卷积形式,我们可以用倍增+FFT计算g
时间复杂度:O(fplog(p)log(m))
【BestCoder #44】的更多相关文章
- 1344:【例4-4】最小花费 dijkstra
1344:[例4-4]最小花费 Dijkstra (1)a [ i ] [ j ] 存转账率(..转后所得率..) (2)dis [ i ] 也就是 a [ 起点 ] [ i ] (3)f [ i ] ...
- 【BestCoder】【Round#44】
模拟+Trie+桶排(归并?)+容斥 A 模(shou)拟(su)题= =感觉好像见过? 计算得分什么的…… //BestCoder #44 A #include<vector> #inc ...
- 【BestCoder #48】
与之前一样,秒刷A和B,然后就永远卡在了C B也因为少看一句话被Hunt掉了 说说C的做法吧(分块大法好 给定一个序列,每次询问区间l-r,求∑(ai^bi),其中bi是指ai在区间中的出现次数,ai ...
- 【BestCoder #45】
用家里的电脑来编程,各种不算 一开始15分钟刷掉T1和T2,然后就永远地卡在了T3... 后来看题解,傻了眼... 它强调的“只有一个答案”我还以为这是在提示我二分答案,于是我一直往权值线段树那个方向 ...
- 【C语言】printf()函数详解
printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上.在前面的例题中我们已多次使用过这 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- 【BestCoder】【Round#41】
枚举+组合数?+DP+数学问题 http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=582 QAQ许久没打过比赛,来一发BC,结果还是只 ...
- 【j2ee spring】44、巴巴运动网前台产品显示
[j2ee spring]44.巴巴运动网前台产品显示 项目结构 项目代码 界面显示 <%@ page language="java" isELIgnored="f ...
- JAVA 基础编程练习题44 【程序 44 偶数的素数和】
44 [程序 44 偶数的素数和] 题目:一个偶数总能表示为两个素数之和. package cskaoyan; public class cskaoyan44 { @org.junit.Test pu ...
随机推荐
- SSI框架下,用jxl实现导出功能
SSI框架下,用jxl实现导出功能 先说明一下,这个是SSI框架下,前端用ExtJs,应用在一个企业级的系统中的导出功能,因为是摸索着做的,所以里面有一些代码想整理一下,如果有人看到了,请视自己的架构 ...
- mysql5.6 配置 文件
mysql 3306 主库配置文件 [client] port = 3306 default-character-set=utf8mb4 socket = /ssd/mysql/3306/tmp/my ...
- JS提示Cannot read property 'replace' of undefined
出现这个错误的原因一般是传的参数为null 在传参之前加个是否为null的判断就行了.
- xml解析之stax
博文引自:http://zangweiren.iteye.com/blog/647334 Java 6.0对XML支持的新特性有许多方面.比如StAX.针对XML-Web服务的Java架构(JAX-W ...
- git分布式版本控制系统常用的操作
Git是一个版本控制系统,用来追踪计算机文件的变化的工具,也是一个供多人使用的协同工具.它是一个分布式的版本控制系统,本文将简单介绍如何使用.简单来说,就是你要和你的伙伴一起完成一项任务,但是你们要互 ...
- (转)在图像处理中,散度 div 具体的作用是什么?
出处http://www.zhihu.com/question/24591127 按:今天看到这篇文章,有点感慨,散度这个概念我初次接触到至少应该是在1998年,时隔这么多年后看到这篇文章,真的 佩服 ...
- 用Go实现RabbitMQ消息收发
// amqp.Dial accepts a string in the AMQP URI format and returns a new Connection over TCP using Pla ...
- [BZOJ2734][HNOI2012] 集合选数(状态压缩+思维)
Description 题目链接 Solution 可以根据条件构造出一个矩阵, 1 3 9 27 81... 2 6 18.... 4 12 36... 这个矩阵满足\(G[i][1]=G[i-1] ...
- spark练习--统计xxx大学的各个少数名族的情况
最近,有一份数据,是关于学校的数据,这个里面有所有学生的信息,今天闲来没事,我就想用spark的方式来读取文件,并且来统计这个学校的各个民族的情况,以前我用hadoop中mapReduce来计算,不得 ...
- 20145202马超《java程序设计》第一周学习总结
这两天的学习让我对java有了初步的了解. 1.java是SUN公司推出的面相网络的编程语言. 特点:完全面向对象,与平台无关,跨平台性(例如c++只能在windows上执行,然而java并没有这些限 ...