emmmm......ouuan大佬上紫了,我却没打......

首先吐槽一波家长会和机房锁门,害我只能来打虚拟赛。


写了abcd四题,还是被ouuan大佬吊打.......

264名,应该能上分吧。

A,你要做n张贺卡,每张贺卡需要2红,5黄,8蓝。

你买一张卡纸就能获得k个某种颜色。问最少买几张卡纸。

解:红色就是(2*n-1)/k+1,别的以此类推。

B,给你个数列,ai=i*(-1)^i,求L到R的和。

解:我们先两两求和,最后可能有多出来的,处理一下。

C,给你个n*m的矩阵,黑白染色。先把一块染成白色,又把一块染成黑色。求最终的黑色个数。

解:先分开处理,然后把交叉的地方的黑色加上。

D,题意比较复杂......

可以想到一种贪心就是先尽量切边缘的一条小道,直到剩余刀数不够。

然后判断别的地方空出来的能不能放下所有剩余刀数。

转化一下就是把别的地方都切了,看刀数是不是小于k。

再转化,能容纳的总刀数 - 切出来小道后小道内不能切的刀数 < k 即为不合法。

发现当n较大时,如果这个图能够容纳k刀,一定存在方案。

n比较小的时候就用公式计算。

 #include <bits/stdc++.h>

 typedef long long LL;
const int N = ; LL n, k; inline bool check(LL n, LL k) {
if(!n) {
return k == ;
}
k = * k + ;
LL a = ;
for(int i = ; i <= n; i++) {
a *= ;
if(a >= k) {
return ;
}
}
return ;
} inline LL qpow(LL a, LL b) {
LL ans = ;
while(b) {
if(b & ) {
ans *= a;
}
a *= a;
b = b >> ;
}
return ans;
} inline void solve() { scanf("%lld%lld", &n, &k); if(!check(n, k)) {
printf("NO\n");
return;
} LL t = ;
while((1ll << (t + )) - (t + ) <= k && t < n) {
t++;
}
//k -= (1ll << (t + 2)) - (t + 3));
LL x = n - t;
if(n <= ) {
LL temp = (qpow(, n) - ) - (qpow(, t + ) - ) * (qpow(, x) - );
k *= ;
if(k <= temp) {
printf("YES %d\n", x);
}
else {
printf("NO\n");
}
return;
}
printf("YES %d\n", x);
return;
} int main() { int T;
scanf("%d", &T);
while(T--) {
solve();
} return ;
}

AC代码

看了看E,好神仙啊,完全不知道如何操作......

给你个字母矩阵,问有多少个子矩阵满足:可以只交换行内元素,使得这个子矩阵的每行每列都回文。n,m<=250

回来补票了。

先看一个合法的子矩阵有什么性质。首先每行出现奇数次的元素不能超过1。然后对应行必须所有字母出现次数相同。

首先预处理出后一个限制。然后枚举子矩阵的左右边界,进行manacher。

 #include <bits/stdc++.h>

 typedef unsigned long long uLL;
typedef long long LL;
const int N = ;
const uLL B = ; uLL h[N * ][N][N], pw[];
int n, m, bin[], f[N * ];
char s[N * ][N];
std::bitset<N> valid[N * ][N]; int main() { scanf("%d%d", &n, &m);
n = n * - ;
for(int i = ; i <= n; i += ) {
scanf("%s", s[i] + );
}
pw[] = ;
for(int i = ; i <= ; i++) {
pw[i] = pw[i - ] * B;
} /// prework
for(int i = ; i <= n; i += ) {
for(int l = ; l <= m; l++) {
memset(bin, , sizeof(bin));
int cnt = ;
uLL H = ;
for(int r = l; r <= m; r++) {
/// [l, r] add r
valid[i + ][l][r] = ;
if(i == ) valid[i - ][l][r] = ;
int f = s[i][r] - 'a';
bin[f]++;
//printf("%llu + %llu = ", H, pw[f]);
H += pw[f];
//printf("%llu \n", H);
if(bin[f] & ) {
cnt++;
}
else {
cnt--;
}
if(cnt <= ) {
valid[i][l][r] = ;
h[i][l][r] = H;
}
//printf("%d %d %d = %d %llu \n", i, l, r, (int)(valid[i][l][r]), h[i][l][r]);
}
}
} LL ans = ;
for(int l = ; l <= m; l++) {
for(int r = l; r <= m; r++) {
/// [l, r]
int large = , pos = ;
//printf("> > [%d %d] \n", l, r);
for(int i = ; i <= n + ; i++) {
if(!valid[i][l][r]) {
f[i] = ;
pos = ;
large = ;
continue;
}
if(i > large) {
f[i] = ;
int j = ;
while(i - j >= && i + j <= n + && h[i - j][l][r] == h[i + j][l][r] && valid[i - j][l][r] && valid[i + j][l][r]) {
f[i] = j;
j++;
}
pos = i;
large = i + f[i];
}
else {
f[i] = f[ * pos - i];
if(i + f[i] > large) {
f[i] = large - i;
}
int j = f[i] + ;
while(i - j >= && i + j <= n + && h[i - j][l][r] == h[i + j][l][r] && valid[i - j][l][r] && valid[i + j][l][r]) {
f[i] = j;
j++;
}
if(i + f[i] > large) {
large = i + f[i];
pos = i;
}
}
ans += (f[i] + ) / ;
//printf("f %d = %d ans += %d \n", i, f[i], (f[i] + 1) / 2);
}
}
} printf("%lld\n", ans);
return ;
}

AC代码

CF1080的更多相关文章

随机推荐

  1. VMware workstation运维实践系列博客导航

    第一章:VMware workstation虚拟化1.1 VMware workstation计算网络存储介绍1.2 VMware workstation其他功能特性介绍1.3 VMware work ...

  2. Mysql优化系列(1)--Innodb重要参数优化

    1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...

  3. M2项目测试

    更为详细的测试报告,我们会在后续整理出来. 在M1的基础上,我们新增加了两个个数据表来存放问答对以及标签信息的表:C705question表 与 tag表 第二次迭代中,我们积极地同第三组沟通,了解到 ...

  4. 《Linux内核分析》第13章

    <Linux内核设计与实现>第十三章--虚拟文件系统概述 20135211 一.通用文件系统接口 之所以可以使用这种通用接口(VF)对所有类型的文件系统进行操作,是因为内核在它的底层文件系 ...

  5. 06-java学习-方法的学习

    方法定义 方法类型 方法涉及的知识: 修饰符.返回类型,命名规则,参数列表 方法常见错误 方法概念的深入理解 为什么会有方法? 方法帮助解决哪些问题? 方法可以简化复杂问题的解决

  6. 二维数组转化为一维数组 contact 与apply 的结合

    将多维数组(尤其是二维数组)转化为一维数组是业务开发中的常用逻辑,除了使用朴素的循环转换以外,我们还可以利用Javascript的语言特性实现更为简洁优雅的转换.本文将从朴素的循环转换开始,逐一介绍三 ...

  7. 『编程题全队』Beta 阶段冲刺博客四

    1.提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID) (1) 昨天已完成的工作 孙志威: 1.新增添加提醒事项的按钮 2.添加了新建提醒框 3.测试了新的SubTask思 ...

  8. HDU 2024 C语言合法标识符

    http://acm.hdu.edu.cn/showproblem.php?pid=2024 Problem Description 输入一个字符串,判断其是否是C的合法标识符.   Input 输入 ...

  9. 使用telnet模拟http请求

    HTTP 首先我们需要知道http报文是由一系列的字符串组成的.然后我们来了解具体的相关事项. 方法 HTTP支持几种不同形式的请求命令,这些命令就被称为HTTP方法.每个HTTP请求报文都包含一个方 ...

  10. eclipse里面找不到databaseexplorer

    在window==>show view==>Other==>Data Management==>Database explorer配置:在右下方点击Database Sourc ...