bupt summer training for 16 #1 ——简单题目
给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 ;
}
数据范围其实不大,对于不止一种解的解决办法
就暴力测试每一个 '?' 就可以了
#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 ——简单题目的更多相关文章
- bupt summer training for 16 #8 ——字符串处理
https://vjudge.net/contest/175596#overview A.设第i次出现的位置左右端点分别为Li,Ri 初始化L0 = 0,则有ans = sum{ (L[i] - L[ ...
- bupt summer training for 16 #6 ——图论
https://vjudge.net/contest/174020 A.100条双向边,每个点最少连2个边 所以最多100个点,点的标号需要离散化 然后要求恰好经过n条路径 快速幂,乘法过程就是flo ...
- bupt summer training for 16 #4 ——数论
https://vjudge.net/contest/173277#overview A.平方差公式后变为 n = (x + y)(x - y) 令 t = x - y ,变成 n = (t + 2x ...
- bupt summer training for 16 #2 ——计算几何
https://vjudge.net/contest/171368#overview A.一个签到题,用叉积来判断一个点在一条线的哪个方向 可以二分,数据范围允许暴力 #include <cst ...
- bupt summer training for 16 #7 ——搜索与DP
https://vjudge.net/contest/174962#overview A.我们发现重点在于x,y只要累加就ok了 在每个x上只有上下两种状态,所以可以记忆化搜索 f[0/1][i]表示 ...
- 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 ...
- bupt summer training for 16 #3 ——构造
https://vjudge.net/contest/172464 后来补题发现这场做的可真他妈傻逼 A.签到傻逼题,自己分情况 #include <cstdio> #include &l ...
- BUPT2017 springtraining(16) #1 ——近期codeforces简单题目回顾
这里是contest 8道题全部来源于 cf 的两场contest (出题人可真懒啊 Codeforces Round #411 (Div. 2)的ABCDE Codeforces Round #40 ...
- 【Android Developers Training】 16. 暂停和恢复一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- sql server中数据约束相关的查询
根据表名查找数据约束 SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'CMS_EventLog'; SEL ...
- SQL 2005批量插入数据的二种方法
SQL 2005批量插入数据的二种方法 Posted on 2010-07-22 18:13 moss_tan_jun 阅读(2635) 评论(2) 编辑 收藏 在SQL Server 中插入一条数据 ...
- codeforces 920 EFG 题解合集 ( Educational Codeforces Round 37 )
E. Connected Components? time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- 引水工程 Kruskal + Prim
Kruskal题解 : 以案例输入为例 有五个缺水地区 , 这个个缺水地区之间建立联系的费用已经给出 并且之间水库的费用也已经给出 , 自己水库也已看为 是另一个 点 , 这样就有了 6 个点 , 这 ...
- 安卓中Canvas实现清屏效果
可以在代码里面添加: paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); canvas.drawPaint(paint) ...
- MFC学习篇(一):用OpenCV显示视频
首先是一些基础的步骤,如建立MFC应用,添加按钮等,博主主要参考了下面这篇文章,其中的前32步都是用OpenCV显示图片和视频所必须的,即通用的.由于LZ原来有配置OpenCV的基础,所以配制还是比较 ...
- 1CSS简介
-------------------------------------------------------------------------------------------------- - ...
- cmd bat 相对命令
"%~dp0",在BAT中,是不是“相对路径”的意思 (2013-08-21 12:19:32) 转载▼ 标签: 杂谈 分类: C# 0念 零 ,代表你的批处理本身. d p是FO ...
- win32之bitmap篇
先讲一下LoadBitmap的用法,代码如下: PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd,&ps); HDC hMemDC = CreateCompa ...
- Python语言之数据结构1(序列--列表,元组,字符串)
0.序列 列表,元组,字符串都是序列. 序列有两个特点:索引操作符和切片操作符.索引操作符让我们可以从序列中抓取一个特定项目.切片操作符让我们能够获取序列的一个切片,即一部分序列. 以字符串为例: 1 ...