1、定义重复串$S=T+T$,即$S$可以表示成一个串的叠加。给定一个串$s$,可以通过删除字符、修改字符、增加字符来使得其变为重复串。问最少的次数。

思路:首先将$s$分成个串$s_{0},s_{1}$,然后计算将$s_{0},s_{1}$变成一样要多少次操作。

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <stack>
#include <assert.h>
using namespace std;int f[111][111];void up(int &x,int y)
{if(x==-1||x>y) x=y;
}int cal(string s1,string s2)
{const int n=(int)s1.size();const int m=(int)s2.size();if(n==0) return m;if(m==0) return n;memset(f,-1,sizeof(f));f[0][0]=0;for(int i=1;i<=m;++i) f[0][i]=i;for(int i=1;i<=n;++i) f[i][0]=i;for(int i=1;i<=n;++i){for(int j=1;j<=m;++j){char c1=s1[i-1];char c2=s2[j-1];up(f[i][j],f[i-1][j]+1);up(f[i][j],f[i][j-1]+1);up(f[i][j],f[i-1][j-1]+(c1!=c2));}}return f[n][m];
}class RepeatString
{
public:int minimalModify(string s){const int n=(int)s.size();int ans=n;for(int i=0;i<=n;++i){ans=min(ans,cal(s.substr(0,i),s.substr(i)));}return ans;}
};

  

2、给出平面上$n$个点的集合$S$,没有三点共线。定义$CH(s)$为包含点集$s$的最小凸包。求这样的点集对$(s_{1},s_{2})$有多少:(1)$s_{1}\in S,s_{2} \in S$;(2)$s_{1},s_{2}$没有交集;(3)$CH(s_{1}),CH(s_{2})$相交。

思路:求出所有的点集对然后减去不相交的。不相交的可以通过枚举两个点$p_{0},p_{1}$来确定一条直线,然后从直线一侧选出一些点跟$p_{0}$组成一个点集,从直线另一侧选出一些点跟$p_{1}$组成一个点集。

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <stack>
#include <assert.h>
using namespace std;const int N=111;
const int mod=1000000007;int C[N][N],p[N];void init()
{C[0][0]=1;for(int i=1;i<N;++i){C[i][0]=C[i][i]=1;for(int j=1;j<i;++j){C[i][j]=C[i-1][j]+C[i-1][j-1];if(C[i][j]>=mod) C[i][j]-=mod;}}p[0]=1;for(int i=1;i<N;++i){p[i]=p[i-1]<<1;if(p[i]>=mod) p[i]-=mod;}
}class IntersectingConvexHull
{
public:int count(vector <int> x, vector <int> y){init();const int n=(int)x.size();int ans=0;for(int i=3;i<=n;++i) for(int j=3;j<=n-i;++j){ans+=(long long)C[n][i]*C[n-i][j]%mod;if(ans>=mod) ans-=mod;}for(int i=0;i<n;++i) for(int j=0;j<n;++j) if(i!=j){int s[2]={0,0};for(int k=0;k<n;++k) if(k!=i&&k!=j){long long d=(long long)(x[j]-x[i])*(y[k]-y[i])-(long long)(x[k]-x[i])*(y[j]-y[i]);if(d>0) ++s[0];else ++s[1];}if(s[0]<2||s[1]<2) continue;int t0=p[s[0]]-1-s[0];int t1=p[s[1]]-1-s[1];ans-=(long long)t0*t1%mod;if(ans<0) ans+=mod;}return ans;}
};int main()
{IntersectingConvexHull p;printf("%d\n",p.count({-2,-1,-1,1,1,2},{1,0,2,0,2,1}));
}

  

转载于:https://www.cnblogs.com/jianglangcaijin/p/6866207.html

topcoder srm 698 div1 -3相关推荐

  1. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  2. topcoder srm 691 div1 -3

    1.给定一个$n$个顶点$n$个边的图,边是$(i,a_{i})$,顶点编号$[0,n-1]$.增加一个顶点$n$,现在选出一个顶点集$M$,对于任意的在$M$中 的顶点$x$,去掉边$(x,a_{x ...

  3. topcoder srm 706 div1

    1.给定一个迷宫,点号表示不可行,井号表示可行.现在可以改变其中的一些井号的位置.问最少改变多少个井号可以使得从左上角到右下角存在路径. 思路:设高为$n$,宽为$m$,若井号的个数$S$小于$n+m ...

  4. topcoder srm 694 div1 -3

    1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...

  5. topcoder srm 330 div1

    problem1 link 直接模拟. import java.util.*; import java.math.*; import static java.lang.Math.*;public cl ...

  6. topcoder srm 360 div1

    problem1 link (1)$n \neq m$时,假设$n<m$,那么同一行中的$m$个数字必定都相等. (2)$n=m$时,要满足任意的$i_{1},i_{2},j_{1},j_{2} ...

  7. topcoder srm 635 div1

    problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. p ...

  8. topcoder srm 495 div1

    problem1 link 从前向后确定一下,然后再从后向前确定一下.一样的话就是可以确定的. problem2 link 首先将强连通分量缩点.理论上来说,只需要遍历所有入度为0的联通块中的一个即可 ...

  9. topcoder srm 325 div1

    problem1 link $g[i]$表示解决前$i$个的代价,那么$g[i]$是所有$g[j]+cost(j+1,i)$的最小值. import java.util.*; import java. ...

最新文章

  1. html给图片做绝对定位,有关绝对定位的全面理解
  2. 四种struts2访问web元素的方式
  3. spark.mllib:GradientBoostedTrees
  4. php mysql having_having的用法
  5. python——获取数据类型
  6. ASP.NET 实践:在非层次化控件中显示网站地图的数据
  7. angularjs中的数据绑定
  8. tf.truncated_normal与tf.random_normal的区别
  9. 没有配置默认路由_网络路由选择原理
  10. 通过DBlink获取不同数据库数据
  11. 物业小区管理系统源码
  12. CEH 讲义 NPM、PYPI、DockerHub 备份
  13. 如何把书上的字弄到电脑
  14. 【文摘】2008年度_Atom处理器
  15. 飞机大战小游戏 C语言(课设任务)
  16. oracle付款汇兑损益怎么产生,汇兑损益如何进行账务处理?
  17. 【App数据运营分析】
  18. 地图和地理空间革命:地理学大规模开放在线课堂(MOOC)
  19. 【深度学习】各种卷积的理解笔记(2D,3D,1x1,可分离卷积)
  20. Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果

热门文章

  1. Netty 从源码的角度深入剖析 ByteBuffer
  2. JS事件循环 Event Loop
  3. linux下打开、关闭tomcat,实时查看tomcat运行日志
  4. Linux下必须知道的网络命令(持续更新)
  5. 如何优雅地关闭Kubernetes集群中的Pod
  6. YAML,另一种标记语言?不止是标记语言!
  7. SQL常用的几个窗口函数
  8. Auto type deducing
  9. 如何对oracle数据库进行监控检查
  10. Android Studio在Ubuntu下离线安装Gradle