[CCF2015.12]题解
201512-1 数位之和
水题一个,取模除以10胡搞即可(不知道字符串为什么不行
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath> using namespace std; int n; int main() {
while(~scanf("%d", &n)) {
int ans = ;
while(n) {
ans += n % ;
n /= ;
}
printf("%d\n", ans);
}
return ;
}
1
201512-2 消除类游戏
按行按列枚举三个相邻的中点,看看左右是否和它相同颜色,如果相同就打标记,最后根据标记处理所有点。
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath> using namespace std; const int maxn = ;
const int dx[] = {, , -, };
const int dy[] = {, -, , };
int n, m;
int G[maxn][maxn];
bool dis[maxn][maxn]; bool ok(int i, int j) {
return i >= && j >= && i < n && j < m;
} int main() {
// freopen("in", "r", stdin);
while(~scanf("%d %d", &n, &m)) {
memset(dis, , sizeof(dis));
for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
scanf("%d", &G[i][j]);
}
}
for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
if(ok(i-, j) && ok(i+, j)) {
if(G[i-][j] == G[i+][j] && G[i-][j] == G[i][j] && G[i+][j] == G[i][j]) {
dis[i-][j] = dis[i+][j] = dis[i][j] = ;
}
}
}
}
for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
if(ok(i, j-) && ok(i, j+)) {
if(G[i][j-] == G[i][j+] && G[i][j-] == G[i][j] && G[i][j+] == G[i][j]) {
dis[i][j-] = dis[i][j+] = dis[i][j] = ;
}
}
}
}
for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
if(dis[i][j]) G[i][j] = ;
printf("%d ", G[i][j]);
}
printf("\n");
}
}
return ;
}
2
201512-3 画图
小模拟,注意好行和列即可,第一个样例提供了一个trick,那就是覆盖后的颜色还可以被继续覆盖,并且覆盖后可以在其上画线段。判断线段相交在每画一段的时候完成,假如画之前存在与它不一样方向的线段就变+(注意原本就是+的情况)。填充操作一遍dfs就行,和POJ的一个题一样。
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath> using namespace std; typedef struct Point {
int x, y;
Point() {}
Point(int xx, int yy) : x(xx), y(yy) {}
}Point; const int maxn = ;
const int dx[] = {, , , -};
const int dy[] = {, -, , }; char G[maxn][maxn];
int n, m, q;
Point a, b;
int cmd; void init() {
memset(G, , sizeof(G));
for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
G[i][j] = '.';
}
}
} void line(Point a, Point b) {
if(a.y == b.y) {
if(a.x > b.x) {
Point tmp = a;
a = b;
b = tmp;
}
for(int i = a.x; i <= b.x; i++) {
if(G[i][a.y] == '-' || G[i][a.y] == '+') G[i][a.y] = '+';
else G[i][a.y] = '|';
}
}
else if(a.x == b.x) {
if(a.y > b.y) {
Point tmp = a;
a = b;
b = tmp;
}
for(int i = a.y; i <= b.y; i++) {
if(G[a.x][i] == '|' || G[a.x][i] == '+') G[a.x][i] = '+';
else G[a.x][i] = '-';
}
}
}
bool ok(int i, int j) {
return i >= && j >= && i < n && j < m;
} void dfs(int x, int y, char s) {
for(int i = ; i < ; i++) {
int xx = x + dx[i];
int yy = y + dy[i];
if(ok(xx, yy) && !(G[xx][yy] == '|' || G[xx][yy] == '+' || G[xx][yy] == '-' ) && G[xx][yy] != s) {
G[xx][yy] = s;
dfs(xx, yy, s);
}
}
} int main() {
// freopen("in", "r", stdin);
while(~scanf("%d %d", &m, &n)) {
scanf("%d", &q);
init();
while(q--) {
scanf("%d", &cmd);
if(cmd == ) {
scanf("%d %d %d %d", &a.y, &a.x, &b.y, &b.x);
line(a, b);
}
else {
char s[];
memset(s, , sizeof(s));
scanf("%d %d", &a.y, &a.x);
scanf("%s", s);
dfs(a.x, a.y, s[]);
}
}
for(int i = n - ; i >= ; i--) {
for(int j = ; j < m; j++) {
printf("%c", G[i][j]);
}
printf("\n");
}
}
return ;
}
3
201512-4 送货
图论小题,求一条不用回到原点的欧拉路,trick在图不连通的情况,因此要提前做一步连通性的判断。还有就是记录点的度,假如是奇数度的点为0个或者2个的时候是存在这样一条路的,假如奇数度点为1或者大于2则不存在。dfs的时候打好标记就可以了。
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath> using namespace std; const int maxn = ;
const int maxm = ;
vector<int>::iterator it;
vector<int> G[maxn];
bool vis[maxn][maxn];
int dig[maxn];
int n, m, top;
int st[maxm];
int pre[maxn]; int find(int x) {
return x == pre[x] ? x : pre[x] = find(pre[x]);
} void unite(int x, int y) {
x = find(x);
y = find(y);
if(x != y) {
pre[y] = x;
}
}
inline void init() {
for(int i = ; i < maxn; i++) {
pre[i] = i;
}
} void dfs(int u) {
for(int i = ; i < G[u].size(); i++) {
if(!vis[u][G[u][i]]) {
vis[u][G[u][i]] = vis[G[u][i]][u] = ;
dfs(G[u][i]);
st[top++] = G[u][i];
}
}
} int main() {
// freopen("in", "r", stdin);
int a, b;
while(~scanf("%d %d", &n, &m)) {
init();
memset(dig, , sizeof(dig));
memset(vis, , sizeof(vis));
for(int i = ; i < n + ; i++) G[i].clear();
for(int i = ; i < m; i++) {
scanf("%d %d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
unite(a, b);
dig[a]++; dig[b]++;
}
int odd = ;
bool exflag = ;
int father = find();
for(int i = ; i <= n; i++) {
if(father != find(i)) exflag = ;
sort(G[i].begin(), G[i].end());
if(dig[i] & ) odd++;
}
if(odd == || odd > || exflag) {
puts("-1");
continue;
}
top = ;
dfs();
printf("");
while(top--) printf(" %d", st[top]);
printf("\n");
}
return ;
}
4
201512-5 矩阵
题目好长QAQ,不想做QAQ
看了一眼题应该是矩阵快速幂,怎么看怎么是个烂题。。
[CCF2015.12]题解的更多相关文章
- “玲珑杯”ACM比赛 Round #12题解&源码
我能说我比较傻么!就只能做一道签到题,没办法,我就先写下A题的题解&源码吧,日后补上剩余题的题解&源码吧! A ...
- cojs 强连通图计数1-2 题解报告
OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...
- 2019.11.11&12题解
Day1 考的不是很好,T1T2没区分度,T3想的太少,考试后期几乎都是在摸鱼,bitset乱搞也不敢打,只拿到了35分,跟前面的差距很大 A. 最大或 标签: 二进制+贪心 题解: 首先x,y中一定 ...
- 8.3 NOIP 模拟12题解
话说这次考试T1和T2是真的水,然而T1CE,T2TLE,T3CE 这不就是在侮辱我的智商啊!之前本机编译都是c++,以后要用c++11. 这次的T1就是一个大型找规律,我的规律都找出来了,但是竟然用 ...
- [CCF2015.09]题解
201509-1 数列分段 水,记下前一个数,看看跟当前是否一样,不一样就ans+1 #include <algorithm> #include <iostream> #inc ...
- [NOIP模拟测试12]题解
A. 找规律题.儿子的编号减去 小于它编号的最大的fibonacci数 即可得到它父亲的编号. 然后两个节点都暴力上跳就好了.预处理一下fibonacci数,每次二分查找即可. #include< ...
- 华东交通大学2017年ACM双基程序设计大赛题解
简单题 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissio ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- Splay树-Codevs 1296 营业额统计
Codevs 1296 营业额统计 题目描述 Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...
随机推荐
- angularJs 问题
1. IE不能渲染指令中的 style="background-color",而chrome和firefox可以 <!DOCTYPE html> <html ng ...
- jquery 常用组件的小代码
获得所有复选框的值 function getAllValue() { var str=""; $("input[name='checkbox']:checkbox&quo ...
- MySQL杂记
参考资料: w3school SQL 教程 : http://www.w3school.com.cn/sql/index.asp 21分钟 MySQL 入门教程 : http://www.cnblo ...
- UML类图(转载)
概述: 类图是静态图.它代表了一个应用程序的静态视图.类图不仅用于可视化描述和记录系统的不同方面,但也为构建可执行代码的软件应用程序. 类图描述一类的属性和操作,也对系统的约束.被广泛应用于类图的建模 ...
- Xml Schema的用途
Xml Schema的用途 1. 定义一个Xml文档中都有什么元素 2. 定义一个Xml文档中都会有什么属性 3. 定义某个节点的都有什么样的子节点,可以有多少个子节点,子节点出现的顺序 4. ...
- Sublime Text3激活 破解
Sublime Text 是一个复杂的文本.代码编辑器.出色用户界面,非凡的功能和惊人的性能. Sublime Text 3 官方网站 http://www.sublimetext.com/ 点击菜单 ...
- javascript和“主流大型语言”(c# JAVA C++等)的差异
1.javascript不支持overload,因为它的函数参数是以数组方式来实现的,没有固定的参数签名,所以无法重载. 2.javascript的基本类型只有5个:number string boo ...
- jvm 之 国际酒店 8 月 19 一次full GC 导致的事故
事故经过: 1 15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败:成单接口调用OMS获取token失败. 2 查看checkList发现15:18开始发 ...
- ExtJs之Ext.getCmp
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- Java常用类库
System System:类中的方法和属性都是静态的. out:标准输出,默认是控制台. in:标准输入,默认是键盘. System描述系统一些信息.获取系统属性信息:Properties getP ...