Codeforces Round #363 (Div. 2)
A题 http://codeforces.com/problemset/problem/699/A
非常的水,两个相向而行,且间距最小的点,搜一遍就是答案了。
#include <cstdio> #include <algorithm> using namespace std; struct node { int x;char ch; }s[+]; bool cmp(node& a,node& b) { return a.x<b.x; } int main() { int n; while(~scanf("%d",&n)) { getchar(); ;i<n;i++) scanf("%c",&s[i].ch); ;i<n;i++) scanf("%d",&s[i].x); sort(s,s+n,cmp); int ans = 0x3f3f3f3f; ;i<n;i++) { ].ch == 'R') { ].x)/; ans = min(ans,dis); } } if(ans == 0x3f3f3f3f) printf("-1\n"); else printf("%d\n",ans); } ; }
B题 http://codeforces.com/problemset/problem/699/B
讲道理 也是水题 然而我在实现的时候 实现不好这个问题 然而梦天2333 毕竟天神啪啪啪随便写写就A了。
这个代码是参考网上的思路搞的,关键是一个V数组和一个C数组记录,行和列的情况。
还有读入字符串的时候要小心的,因为它题目中默认的地图是从1开始的,如果直接scanf ma[i]这样读进来 就是每行都从0开始了,和题意不符
scanf();//输入的一个小技巧
其实思路和它标程是一样的,就是没码出来。
#include <cstdio> #include <cstring> #define mem0(x) memset(x,0,sizeof(x)) ][]; ],C[]; int tot,fi,fj,n,m; bool judge() { ;i<=n;i++) { ;j<=m;j++) { int cur = R[i] + C[j]; if(ma[i][j] == '*') cur--; if(tot == cur) { fi = i, fj = j; return true; } } } return false; } int main() { while(~scanf("%d%d",&n,&m)) { mem0(R); mem0(C); ;i<=n;i++) scanf();//输入的一个小技巧 tot = ; ;i<=n;i++) ;j<=m;j++) if(ma[i][j] == '*') { R[i] ++; C[j] ++; tot++; } if(judge()) printf("YES\n%d %d\n",fi,fj); else printf("NO\n"); } ; }
C题 http://codeforces.com/problemset/problem/698/A
dp,小心一下 任何一种情况下都是能选择休息的。
#include <cstdio> #include <map> #include <queue> #include <cstring> #include <algorithm> #include <iostream> using namespace std; #define mem0(x) memset(x,0,sizeof(x)) #define mem1(x) memset(x,-1,sizeof(x)) typedef long long LL; const int INF = 0x3f3f3f3f; int a; ][]; int main() { int n; scanf("%d",&n); ;i<=n;i++) { scanf("%d",&a); ) { dp[i][] = max(max(dp[i-][], dp[i-][]), dp[i-][]); } ) { dp[i][] = max(max(dp[i-][],dp[i-][]),dp[i-][]); dp[i][] = max(dp[i-][], dp[i-][]) + ; } ) { dp[i][] = max(max(dp[i-][],dp[i-][]),dp[i-][]); dp[i][] = max(dp[i-][], dp[i-][]) + ; } else { dp[i][] = max(max(dp[i-][],dp[i-][]),dp[i-][]); dp[i][] = max(dp[i-][], dp[i-][]) + ; dp[i][] = max(dp[i-][], dp[i-][]) + ; } } ; ;i<;i++) maxn = max(maxn, dp[n][i]); printf("%d\n",n-maxn); ; }
D题 http://codeforces.com/problemset/problem/698/B
这题挺难想的当时。先思考整个问题,无非是由若干个环和若干棵树来组成了最初的图。
如果都是树,那么很好解决,选一棵树作为主树,其他的树根直接链接到主树的根上就解决问题了,修改次数应该是根结点的总数目-1。
如果都是环,那么,把某个环的某个结点接到自己身上,形成一棵树之后,其他的环直接接上来就好了。
如果是环和树都有,那么只要把环接到主树上就好了。
#include <cstdio> #include <map> #include <queue> #include <cstring> #include <algorithm> #include <iostream> using namespace std; #define mem0(x) memset(x,0,sizeof(x)) #define mem1(x) memset(x,-1,sizeof(x)) typedef long long LL; const int INF = 0x3f3f3f3f; ]; ]; int uf_find(int x) { if(x==pa[x]) return x; return pa[x] = uf_find(pa[x]); } int main() { int n,cnt,root; scanf("%d",&n); //uf_init ;i<=n;i++) pa[i] = i ; cnt = , root = ; ;i<=n;i++) { scanf("%d",&a[i]); if(i == a[i]) { cnt++,root = i; } else { int fx = uf_find(i); int fy = uf_find(a[i]); if(fx == fy) a[i] = i,cnt++;//成环 else pa[fx] = fy; } } ) { ;i<=n;i++) { if(i == pa[i]) { root = i; break; } } cnt++; } printf(); ;i<=n;i++) { if(i == a[i]) a[i] = root;//根只能有一个 printf("%d%c",a[i],i==n?'\n':' '); } ; }
Codeforces Round #363 (Div. 2)的更多相关文章
- Codeforces Round 363 Div. 1 (A,B,C,D,E,F)
Codeforces Round 363 Div. 1 题目链接:## 点击打开链接 A. Vacations (1s, 256MB) 题目大意:给定连续 \(n\) 天,每天为如下四种状态之一: 不 ...
- Codeforces Round #363 (Div. 1) B. Fix a Tree 树的拆环
题目链接:http://codeforces.com/problemset/problem/698/B题意:告诉你n个节点当前的父节点,修改最少的点的父节点使之变成一棵有根树.思路:拆环.题解:htt ...
- Codeforces Round #363 (Div. 2) D. Fix a Tree —— 并查集
题目链接:http://codeforces.com/contest/699/problem/D D. Fix a Tree time limit per test 2 seconds memory ...
- Codeforces Round #363 (Div. 2) B. One Bomb —— 技巧
题目链接:http://codeforces.com/contest/699/problem/B 题解: 首先统计每行每列出现'*'的次数,以及'*'出现的总次数,得到r[n]和c[m]数组,以及su ...
- Codeforces Round #363 (Div. 2) C. Vacations —— DP
题目链接:http://codeforces.com/contest/699/problem/C 题解: 1.可知每天有三个状态:1.contest ,2.gym,3.rest. 2.所以设dp[i] ...
- Codeforces Round #363 (Div. 2)A-D
699A 题意:在一根数轴上有n个东西以相同的速率1m/s在运动,给出他们的坐标以及运动方向,问最快发生的碰撞在什么时候 思路:遍历一遍坐标,看那两个相邻的可能相撞,更新ans #include< ...
- Codeforces Round #363 Div.2[111110]
好久没做手生了,不然前四道都是能A的,当然,正常发挥也是菜. A:Launch of Collider 题意:20万个点排在一条直线上,其坐标均为偶数.从某一时刻开始向左或向右运动,速度为每秒1个单位 ...
- Codeforces Round #363 (Div. 2) One Bomb
One Bomb 题意: 只有一个炸弹,并且一个只能炸一行和一列的'*',问最后能否炸完所以'*',如果可以输出炸弹坐标 题解: 这题做的时候真的没什么好想法,明知道b题应该不难,但只会瞎写,最后越写 ...
- Codeforces Round #363 (Div. 2)->C. Vacations
C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
随机推荐
- Long Short-Term Memory (LSTM)公式简介
Long short-term memory: make that short-term memory last for a long time. Paper Reference: A Critica ...
- SourceTree推送时,增加额外的远程仓库,不用每次都自定义粘贴复制网络
一.命令行添加 二.软件界面可以查看到结果 更新,以上是代码添加了远程仓库,最近,找到了不用代码,直接在文件夹里写地址来添加的方式.直接上图了.
- Redis【知识点】批量删除指定Key
Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢! 第一种方式 /work/app/redis/bin/redis-cli -a youpassw ...
- React开发入门
目录: 一.前言 二.什么是React 三.开发环境搭建 四.预备知识 五.最简单的React小程序 六.基础语法介绍 七.总结 八.参考资料 一.前言 近段时间看到学长公司招聘React Nat ...
- 【Go入门教程6】interface(interface类型、interface值、空interface{}、嵌入interface、反射)
interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服. 什么是interface 简单 ...
- JS中的 new 操作符简单理解
首先上一一个简单的 new 操作符实例 var Person = function(name){ this.name = name; this.say = function(){ return &qu ...
- CSS代码片段【图文】
1.垂直对齐 .verticalcenter{ position: relative; top: 50%; -webkit-transform: translateY(-50%); -o-transf ...
- Find All Numbers Disappeared in an Array
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...
- 守护神 Supervisor
参考: http://linbo.github.io/2013/04/04/supervisor/ http://www.restran.net/2015/10/04/supervisord-tuto ...
- 使用 CoordinatorLayout 实现复杂联动效果
GitHub 地址已更新: unixzii / android-FancyBehaviorDemo CoordinatorLayout 是 Google 在 Design Support 包中提供的一 ...