Topcoder SRM 637 (Div.2)
A.GreaterGameDiv2
不能更水
#line 7 "GreaterGameDiv2.cpp"
#include<cstdio>
#include <cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<string>
#include <ctime>
#include<vector>
#include<queue>
#include <cctype>
#include<sstream>
#define eps 0.000001
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define clr(x,a) memset(x,a,sizeof(x))
#define sz(x) (int)x.size()
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long LL;
int n,m;
class GreaterGameDiv2
{
public:
int calc(vector <int> s, vector <int> t)
{
int i,j,k;
int ans=;
for (i=;i<s.size();i++)
{
if (s[i]>t[i]) ans++;
}
return ans;
}
};
B.PathGameDiv2
贪心策略,使得这条路转完次数尽量小(因为转一次就多占一个格子),那么主人公一直往前走,直到遇见墙才转弯,求出路径再求答案就容易了。注意要枚举一下起始点,可以是第一行,也可以是第二行
#include<cstdio>
#include <cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<string>
#include <ctime>
#include<vector>
#include<queue>
#include <cctype>
#include<sstream>
#define eps 0.000001
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define clr(x,a) memset(x,a,sizeof(x))
#define sz(x) (int)x.size()
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long LL;
int n,m;
class PathGameDiv2
{
public:
int calc(vector <string> board)
{
int i,j,k;
string a=board[],b=board[];
int len=a.size();
int flag=;
int ans=;
if (board[][]=='.')
{ for (i=;i<len;i++)
{
if (i!=len-&&board[flag][i+]=='#')
{
flag=!flag;
}else
if (board[flag^][i]=='.')
{
ans++;
}
}
}
int ans2=;
if (board[][]=='.')
{
flag=;
for (i=;i<len;i++)
{
if (i!=len-&&board[flag][i+]=='#')
{
flag=!flag;
}else
if (board[flag^][i]=='.')
{
ans2++;
}
}
}
return max(ans,ans2);
}
};
C.ConnectingGameDiv2
给一个n*m(均小于等于50)的地图,图中用不同的符号划分为多个区域,每个区域中 相邻点一定有一个公共边,
现有一个标记操作,一次标记只能标记一个区域中的全部点,
求至少标记多少个点(注意是点) 使得不存在一条路径,从图最上端沿未标记点走到地图最下端。
最短路径问题
首先是构图,每一块区域可以化为一个点,点的权值是这个区域的面积,然后对于区域i,如果区域j与之相邻①,则从图中的点i向点j连一条边,
这样现在问题就转化为:从原地图最左端开始到最右端结束,选一条路径,且点权值和最小。
1.这是多起点,多终点的问题,所以需要添加一个虚拟的起点与终点,虚拟起点与各个起点连一条边,各个终点与虚拟起点连一条边
2.将点权化为边权,对于点i,我们将以点i为起点边的权值规定为点的权值。
因为点数并不是很多,跑一发弗洛伊德算法即可。
①注意这道题有一个神奇的坑点:所选的区域并不一定是相邻的,比如说这样:
显然这样也是满足题意的,也就是说我们需要定义另一种区域相邻,即在八个相邻即可,而不是原来的四个方向相邻。
#include<cstdio>
#include <cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<string>
#include <ctime>
#include<vector>
#include<queue>
#include <cctype>
#include<sstream>
#define eps 0.000001
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define clr(x,a) memset(x,a,sizeof(x))
#define sz(x) (int)x.size()
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long LL;
int n,m;
class ConnectingGameDiv2
{
int dis[][],sum[],start,finish,left,right;
vector <string> grid;
public:
void addedge(int i,int j,int x, int y)
{
if (x<||y<||x>=n||y>=m) return;
int a=(int)grid[i][j];
int b=(int)grid[x][y];
dis[a][b]=min(dis[a][b],sum[a]);
dis[b][a]=min(dis[b][a],sum[b]);
} int getmin(vector <string> board)
{
grid=board;
int i,j,k;
n=board.size();
m=board[].size();
memset(sum,,sizeof(sum));
for (i=;i<n;i++)
{
for (j=;j<m;j++)
{
sum[(int)board[i][j]]++;
}
}
for (i=;i<;i++)
{
for (j=;j<;j++)
{
dis[i][j]=;
}
}
for (i=;i<;i++) dis[i][i]=;
start=;
finish=;
for (i=;i<n;i++)
{
left=(int)board[i][];
right=(int)board[i][m-];
dis[start][left]=;
dis[right][finish]=sum[right];
}
for (i=;i<n;i++)
{
for (j=;j<m;j++)
{
addedge(i,j,i+,j);
addedge(i,j,i-,j);
addedge(i,j,i,j+);
addedge(i,j,i,j-); addedge(i,j,i+,j+);
addedge(i,j,i-,j-);
addedge(i,j,i+,j-);
addedge(i,j,i-,j+);
}
}
for (k=;k<;k++)
{
for (i=;i<;i++)
{
for (j=;j<;j++)
{
if (i==j||j==k||i==k) continue;
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
return dis[start][finish];
}
};
==================================
第一次用,TC客户端的插件,怎么说呢,相当方便。省去了每次粘类名的麻烦,它都给自动生成,而且测试也简单的多。
总之这次比赛还算满意的,虽然比赛后仍是灰名,但rating涨了104,也是醉了,还没有绿名。
这次写了两道题,第三道因为写的略微麻烦没有写完,嘛,反正最后也是参考了别人的代码才得以简化的。
【一点经验】图论题目如果点少的话还是尽量用邻接矩阵,这样也不容易出错,代码写的也快,尤其是对TC这种短时间的比赛
Topcoder SRM 637 (Div.2)的更多相关文章
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- [topcoder]SRM 646 DIV 2
第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...
- [topcoder]SRM 633 DIV 2
第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...
- Topcoder SRM 648 (div.2)
第一次做TC全部通过,截图纪念一下. 终于蓝了一次,也是TC上第一次变成蓝名,下次就要做Div.1了,希望div1不要挂零..._(:зゝ∠)_ A. KitayutaMart2 万年不变的水题. # ...
- 【topcoder SRM 702 DIV 2 250】TestTaking
Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...
- TopCoder SRM 639 Div.2 500 AliceGameEasy
题意: 一个游戏有n轮,有A和B比赛,谁在第 i 轮得胜,就获得 i 分,给出x,y,问A得x分,B得y分有没有可能,如果有,输出A最少赢的盘数 解题思路: 首先判断n(n+1)/2 = (x+y)是 ...
随机推荐
- 【行为型】Iterator模式
迭代器模式提供一种方法顺序访问聚合对象中的各个元素,而又不需要暴露该聚合对象的内部表示.对于该模式,估计几乎所有的人都使用过,在此直接给出类结构图参考如下: 如前所述,迭代器模式的思想主要是:一能提供 ...
- Linux shell (一)
echo -e "Hello World! \a \n" # -e 解析反斜杠 read -p "Please input your first name: &q ...
- SVN客户端忽略无关文件-备
修改前请先备份文件 ~/.subversion/config. 1,打开Terminal,输入命令: $ open ~/.subversion/config 2,在打开的文件中寻找:`global ...
- JQuery整体大纲
今天公司放假,闲的无聊,就总结了一套JQuery的笔记,我感觉更像是大纲,在这里跟大家分享一下,这是我的成果: 这个就是我的劳动成果了,说实话真是不容易,为了做这个东西,翻阅了很多以前做过的笔记,发现 ...
- 构建高可用web站点(四)
首先我们来了解负载均衡的概念:英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡.分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服 ...
- 开发者应该避免使用的6个Java功能(转)
本文作者是一名拥有多年Java开发经验的程序员,他从经验中得出,并不是所有的Java SE功能/API都值得程序员去使用,比如本文列举的这6个,大家在使用前得慎重对待.以下是对原文的摘译. 多年的Ja ...
- 读取Word文档的标题
一:描述,将读取的文档标题添加到下拉框中 二:代码 #region 方法:得到Word文档标题的内容 public static List<string> GetTitles(int j, ...
- Java NIO 和 IO 的区别详解
Java NIO为jdk1.4提供了新的API,本文主要来比较一下Java中NIO和IO的区别,Java初学者可以了解一下. 下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分 ...
- DAY TRADER
日内交易是一种交易模式,英文名字是daytrade,主要是指持仓时间短,不留过夜持仓的交易方式.日内交易捕捉入市后能够马上脱离入市成本的交易机会,入市之后如果不能马上获利,就准备迅速离场.因为这种交易 ...
- Ensures there will be no 'console is undefined' errors
很早之前项目中遇到过这种bug, 当时没有多留意,只是暂时把笔记留了下来,今天整理笔记的时候,看到了,故先整理在此,具体用法下次遇到再好好理解理解.如果有筒子遇到过,麻烦留言说一下,先谢谢啦. //E ...