D.What a Mess

给n个数,求其中能满足 a[i] % a[j] == 0 的数对之和

n = 1W,max_ai = 100W 不是很大,所以就直接筛就可以了

计算可得最高复杂度 < 1kW

...考场上写了这个解法,结果把 j += i 写成了 j ++ ...

我还以为是单个测试点case太多...多么痛的领悟...

 #include <bits/stdc++.h>

 using namespace std;

 int Case, n, m, k, a[], b[];

 int main() {
scanf("%d", &Case);
while(Case --) {
m = , k = ;
scanf("%d", &n);
for(int i = ;i <= n;i ++) scanf("%d", &a[i]), b[a[i]] ++, k = max(k, a[i]);
for(int i = ;i <= k;i ++) {
if(!b[i]) continue;
m += b[i] * (b[i] - ) / ;
for(int j = i << ;j <= k;j += i)
m += b[j] * b[i];
}
printf("%d\n", m);
for(int i = ;i <= n;i ++) b[a[i]] --;
}
return ;
}

H.Paint it really, really dark gray

之前写过...但因为清楚记得之前调了一段时间...最后时间不是很多就去看D了...迷

假如递归过程中,当前节点的子节点都是叶子节点,那么只要访问一下需要染色的节点再回来就可以了

这样它的子节点都满足要求了,那么当前节点就可以看作是叶子节点了,然后处理上一层...

 #include <bits/stdc++.h>

 using namespace std;

 int n, a[], v[];

 vector <int> e[], ans;

 bool d[];

 void dfs(int x) {
a[x] = d[x] = (a[x] == -), v[x] = ;
for(int i = ;i < e[x].size();i ++) {
if(v[e[x][i]]) continue;
dfs(e[x][i]);
d[x] |= d[e[x][i]];
}
} void dfs_(int x, int f) {
a[x] ^= , ans.push_back(x);
for(int i = ;i < e[x].size();i ++) {
if(e[x][i] == f) continue;
if(d[e[x][i]]) dfs_(e[x][i], x), ans.push_back(x), a[x] ^= ;
}
if(a[x] && x != ) ans.push_back(f), ans.push_back(x), a[f] ^= , a[x] ^= ;
} int main() {
ios::sync_with_stdio(false);
cin >> n;
for(int i = ;i <= n;i ++) cin >> a[i];
int u, v;
for(int i = ;i < n;i ++) {
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
dfs(), dfs_(, );
for(auto it : ans) printf("%d ", it);
if(!a[]) printf("%d 1 %d", e[][], e[][]);
return ;
}

A.Treasure Island

数据范围其实不大,对于不止一种解的解决办法

就暴力测试每一个 '?' 就可以了

 #include <bits/stdc++.h>

 #define rep(i, j, k) for(int i = j;i <= k;i ++)

 int n, m, sx, sy, cnt, lcnt, last;

 char s[][];

 int mmp[][];

 const int xx[] = {, , , -};
const int yy[] = {, -, , }; void dfs(int x, int y, int nx = , int ny = ) {
cnt ++;
rep(i, , ) {
nx = x + xx[i], ny = y + yy[i];
if(nx > && nx <= n && ny > && ny <= m && s[nx][ny] != '#' && !mmp[nx][ny]) {
mmp[nx][ny] = ;
if(s[nx][ny] == '?') s[nx][ny] = '!';
dfs(nx, ny);
}
}
} int main() {
scanf("%d %d", &n, &m);
rep(i, , n) scanf("%s", s[i] + );
rep(i, , n) rep(j, , m)
if(s[i][j] == '.' && !mmp[i][j]) {
lcnt ++, sx = i, sy = j;
if(lcnt == ) {
puts("Impossible");
return ;
}
mmp[i][j] = , dfs(i, j);
}
last = cnt;
rep(i, , n) rep(j, , m) {
if(s[i][j] == '?') s[i][j] = '#';
else if(s[i][j] == '!') {
s[i][j] = '#', cnt = ;
memset(mmp, , sizeof mmp);
mmp[sx][sy] = , dfs(sx, sy);
if(cnt + == last) {
puts("Ambiguous");
return ;
}
else s[i][j] = '.';
}
}
rep(i, , n) puts(s[i] + );
return ;
}

bupt summer training for 16 #1 ——简单题目的更多相关文章

  1. bupt summer training for 16 #8 ——字符串处理

    https://vjudge.net/contest/175596#overview A.设第i次出现的位置左右端点分别为Li,Ri 初始化L0 = 0,则有ans = sum{ (L[i] - L[ ...

  2. bupt summer training for 16 #6 ——图论

    https://vjudge.net/contest/174020 A.100条双向边,每个点最少连2个边 所以最多100个点,点的标号需要离散化 然后要求恰好经过n条路径 快速幂,乘法过程就是flo ...

  3. bupt summer training for 16 #4 ——数论

    https://vjudge.net/contest/173277#overview A.平方差公式后变为 n = (x + y)(x - y) 令 t = x - y ,变成 n = (t + 2x ...

  4. bupt summer training for 16 #2 ——计算几何

    https://vjudge.net/contest/171368#overview A.一个签到题,用叉积来判断一个点在一条线的哪个方向 可以二分,数据范围允许暴力 #include <cst ...

  5. bupt summer training for 16 #7 ——搜索与DP

    https://vjudge.net/contest/174962#overview A.我们发现重点在于x,y只要累加就ok了 在每个x上只有上下两种状态,所以可以记忆化搜索 f[0/1][i]表示 ...

  6. bupt summer training for 16 #5 ——数据结构

    https://vjudge.net/contest/173780 A.假设 Pt = i,则由Ppi = i得 Ppt = t = Pi 所以就有 if Pt = i then Pi = t #in ...

  7. bupt summer training for 16 #3 ——构造

    https://vjudge.net/contest/172464 后来补题发现这场做的可真他妈傻逼 A.签到傻逼题,自己分情况 #include <cstdio> #include &l ...

  8. BUPT2017 springtraining(16) #1 ——近期codeforces简单题目回顾

    这里是contest 8道题全部来源于 cf 的两场contest (出题人可真懒啊 Codeforces Round #411 (Div. 2)的ABCDE Codeforces Round #40 ...

  9. 【Android Developers Training】 16. 暂停和恢复一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. Python猜年龄

    题目:Python实现猜年龄 步骤一:实现最简单的猜年龄 # 事先定义 dark_knight_age = 28 user_age = input('Please guess my age:') us ...

  2. PCB ODB++(Gerber)图形绘制实现方法

    这里讲解一下用net解析PCB图形绘制实现方法 一.解析PCB图形绘制实现 解析PCB图形,说简单也非常简单,先说一下,PCB Gerber图形由:点,线,弧,铜皮,文字 5类元素组成,通常简写为:P ...

  3. C语言内存管理总结

    更新: 2018/01/09 增加free() 更新: 2018/04/13 修改部分文字与表格背景色与默认颜色相同 //# TODO: malloc, alloc, calloc, realloc ...

  4. hdu5698瞬间移动(组合数,逆元)

    瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  5. [Swift通天遁地]八、媒体与动画-(10)在项目中播放GIF动画

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. Spring Cloud (13) 服务网关-路由配置

    传统路由配置 所谓传统路由配置方式就是在不依赖于服务发现机制情况下,通过在配置文件中具体制定每个路由表达式与服务实例的映射关系来实现API网关对外部请求的路由.没有Eureka服务治理框架帮助的时候, ...

  7. SQL--大解密之组织数据

    今天为大家带来的是数据库的基本用法   首先带大家了解下数据库. 大量的数据正在不断产生,伴随而来的是如何安全有效地存储.检索.管理他们. 对数据的有效存储.高效访问.方便共享和安全控制等问题成为信息 ...

  8. java中String类为什么要设计成final?

    1 将方法或类声明为final主要目的是:确保它们不会在子类中改变语义.String类是final类,这意味着不允许任何人定义String的子类. String基本约定中最重要的一条是immutabl ...

  9. mysql常用命令介绍

    mysql适用于在Internet上存取数据,支持多种平台 1.主键:唯一标识表中每行的这个列,没有主键更新或删除表中的特定行很困难. 2.连接mysql可以用Navicat 要读取数据库中的内容先要 ...

  10. 【YOLO】只检测人

    一.修改源代码 cfg/coco.data classes= #修改成1 train = /home/pjreddie/data/coco/trainvalno5k.txt valid = coco_ ...