SRM 596 DIV 2
前段时间终于配置好了TopCoder的环境,所以就拿这场的DIV2练习了一下
1. 250pt FoxAndSightseeing
题意
给你n个城市的位置,他们在同一直线上,要求你跳过其中某一个城市,按顺序依次访问其他的城市,求距离的最小值
题解
由于数据规模为n<=50,所以直接枚举就好
代码:
class FoxAndSightseeing
{
public:
int getMin(vector <int> position)
{
int ans=INF;
for(int i=;i<position.size()-;i++)
{
int sum=,pre=position[];
for(int j=;j<position.size();j++)
{
if(j==i) continue;
sum+=abs(position[j]-pre);
pre=position[j];
}
if(sum<ans) ans=sum;
}
return ans;
}
};
2. 500pt ColorfulRoa
题意
给定n个点,每个点有一个颜色(R,G,B分别表示红绿蓝),要求你选择其中的一些点,使得总花费最少。在选择的点中,相邻的两点之间有一个花费,假设选择了i和j,那么花费就是(i-j)*(i-j),另外要求你选择的点的颜色按顺序依次是R,G,B,R,G,B。。。。
题解
很水的DP,方程为dp[i]=min(dp[i],dp[j]+(i-j)*(i-j))((cr[j]=='R'&&cr[i]=='G')||(cr[j]=='G'&&cr[i]=='B')||(cr[j]=='B'&&cr[i]=='R'))
代码:
int dp[];
bool check(char a,char b)
{
return (a=='R'&&b=='G')||(a=='G'&&b=='B')||(a=='B'&&b=='R');
}
class ColorfulRoad
{
public:
int getMin(string road)
{
int i,j;
memset(dp,INF,sizeof(dp));
dp[]=;
FOR(i,,road.size()-)
REP(j,i)
if(check(road[j],road[i]))
dp[i]=min(dp[i],dp[j]+(i-j)*(i-j));
return dp[road.size()-]==INF?-:dp[road.size()-];
}
};
3. 1000pt SparseFactorialDiv2
题目大意
对于整数n,我们定义F(n) = (n - 0^2) * (n - 1^2) * (n - 2^2) * (n - 3^2) * ... * (n - k^2),k为使得n-k^2>0的最大整数。给定lo,hi,和p(是一个素数),请你计算lo<=n<=hi中能够使得F(n)可以被divisor整除的n的个数
题解
因为p是素数,如果F(n)能够被p整除,说明F(n)的某一个因子(n-i^2)可以被p整除
用数学表示为(n-i^2)%p==0
n≡i^2(mod p)
n=i^2+x*p
那么对于每一个i,我们就有x=(n-i^2)/p个符合情况,我们只需要枚举i即可,不过需要注意一点的是这样会重复计算,因此如果i^2≡j^2(mod p)(i<j) 那么如果在j的时候的x也算入答案中的话就多算了,因为我们在i的时候已经计算过了,那如何处理这种情况呢?只需要对余数判重即可,即如果i^2%p已经存在,那么此时的x不计入答案,把没个符合要求的x累加起来就是最终的答案
代码:
map<LL,int>ms;
LL getAns(LL r,LL p)
{
ms.clear();
LL ans=;
for(LL i=; i*i<=r; i++)
{
if(ms[i*i%p]) continue;
ans+=(r-i*i)/p;
ms[i*i%p]++;
}
return ans;
}
class SparseFactorialDiv2
{
public:
LL getCount(LL lo, LL hi, LL divisor)
{
return getAns(hi,divisor)-getAns(lo-,divisor);
}
};
SRM 596 DIV 2的更多相关文章
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- Topcoder口胡记 SRM 562 Div 1 ~ SRM 599 Div 1
据说做TC题有助于提高知识水平? :) 传送门:https://284914869.github.io/AEoj/index.html 转载请注明链接:http://www.cnblogs.com/B ...
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- 竞赛图的得分序列 (SRM 717 div 1 250)
SRM 717 DIV 1 中 出了这样一道题: 竞赛图就是把一个无向完全图的边定向后得到的有向图,得分序列就是每个点的出度构成的序列. 给出一个合法的竞赛图出度序列, 要求构造出原图(原题是求(u, ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- Topcoder SRM 648 (div.2)
第一次做TC全部通过,截图纪念一下. 终于蓝了一次,也是TC上第一次变成蓝名,下次就要做Div.1了,希望div1不要挂零..._(:зゝ∠)_ A. KitayutaMart2 万年不变的水题. # ...
- SRM 596 DIV2
250pt: 直接枚举跳过的位置求和即可. int n,m; int ABS(int a) { ) return (-a); else return a; } class FoxAndSightsee ...
- SRM 638 Div.2
250 给一个字符串 要求从一种形式换成另一形式 class NamingConvention{ private: int a, b, c; public: int d; string toCamel ...
- [topcoder]SRM 646 DIV 2
第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...
随机推荐
- ural 1160
最小生成树 第一次敲 套用几个函数 其实挺容易的 #include <cstdio> #include <cstring> #include <vector> # ...
- Untiy 接入 移动MM 详解
原地址:http://www.cnblogs.com/alongu3d/p/3627936.html Untiy 接入 移动MM 详解 第一次接到师傅的任务(小龙),准备着手写untiy接入第三方SD ...
- tomcat配置301重定向(urlRewrite URL重写)
tomcat默认情况下不带www的域名是不会跳转到带www的域名的,而且也无法像apache那样通过配置.htaccess来实现.如果想要把不带“www'的域名重定向到带”www"域名下,又 ...
- linux 使用kill命令杀死进程的几个办法
常规篇: 首先,用ps查看进程,方法如下: $ ps -ef ……smx 1822 1 0 11:38 ? 00:00:49 gnome-terminalsmx ...
- cocos2d-x 扩充引擎基类功能 引起的头文件重复包含问题的分析
c++ 头文件包含 原因的分析: c++ 头文件的循环引用是指: .h 里面的里面的头文件的相互包含的,引起的重复引用的问题.cpp 里面包含头文件是不存在重复引用的问题(因为CPP没有#ifn ...
- LinkedList源代码深入剖析
第1部分 LinkedList介绍LinkedList简介 public class LinkedList<E> extends AbstractSequentialList<E&g ...
- Android安全问题 抢先接收广播 - 内因篇之广播发送流程
导读:本文说明系统发送广播的部分流程,如何利用Intent查找到对应接收器.我们依然只关注接收器的排序问题 这篇文章主要是针对我前两篇文章 android安全问题(四) 抢先开机启动 - 结果篇 an ...
- semantic versioning语义化版本号
语义化版本号 是由github创始人 Tom Preston-Werner 发起的一个关于软件版本号的命名规范,关于这个规范详细的说明可以在 官网 查看,也可访问其 GitHub项目页面 ,官网文档: ...
- js setTimeout深度递归后完成回调
setTimout原型: iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage]) setTimeout有两种形式 se ...
- uboot源码整体框架
源码解压以后,我们可以看到以下的文件和文件夹: cpu 与处理器相关的文件.每个子目录中都包括cpu.c和interrupt.c.start.S.u-boot.lds. cpu.c:初始化CPU.设 ...