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}));
}

  

topcoder srm 698 div1 -3的更多相关文章

  1. Topcoder SRM 698 Div1 250 RepeatString(dp)

    题意 [题目链接]这怎么发链接啊..... Sol 枚举一个断点,然后类似于LIS一样dp一波 这个边界条件有点迷啊..fst了两遍... #include<bits/stdc++.h> ...

  2. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  3. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  4. topcoder srm 714 div1

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

  5. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  6. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  7. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  8. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  9. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

随机推荐

  1. js跨域需要token。

    将rems从tms中独立出来以后,每次都需要先打开tms,再打开rems,如果我足够聪明,那么很容易可以分析得到原因. 第一,会导致跨域出现问题的易错点就那么几个,是否加上“Access-Contro ...

  2. Linux 安装Eclipse

    安装Eclipse 场景: 我用的是笔记本(Windows系统),我在笔记本上安装了虚拟机,在 虚拟机中安装了Linux系统,使用的镜像是:CentOS-6.6-x86_64-bin-DVD1.iso ...

  3. centos7上安装nodejs

    1. 确保安装编译工具 $ yum -y install gcc gcc-c++ 2. 获取官网源码 : $ wget https://nodejs.org/dist/v9.9.0/node-v9.9 ...

  4. [ English ] Ping sb.

    What does "Ping Me" mean?   Recently, when I asked a colleague to ping me, he responded wi ...

  5. object base基类分析

    uvm_object,是所有uvm data和hierarchical class的基类,实现了copy,compare,print,record之类的函数 扩展类中必须实现create和get_ty ...

  6. report源码分析——report_handle和report_server和report_catcher

    report_handle主要实现对message的action,severity,file的设置,然后将message传递给server: 主要的function有两个:initial和proces ...

  7. Marlin 擠出頭溫度控制PID值校正

    Marlin 擠出頭溫度控制PID值校正 擠出頭加熱器.溫度感應器安裝好後,先別急著直接指定工作溫度並且加熱.因為控制板上的溫度控制PID參數尚未校正.如果加熱速度過快,有可能會加熱過度並且導致零件燒 ...

  8. sitecore系列教程之改进Sitecore编辑体验的5个步骤

    Sitecore完全关注客户体验,在适当的时间为合适的人提供合适的体验.虽然没有人会不同意客户体验是王道,但我们仍然需要记住每天使用Sitecore的人们为客户带来惊人体验的体验. 我看到无数客户通过 ...

  9. jQuery选择器--:first和:last

       :first 概述 获取匹配的第一个元素    :last 概述 获取匹配的最后个元素 <!DOCTYPE html> <html> <head> <m ...

  10. 【Alpha版本】冲刺阶段——Day3

    [Alpha版本]冲刺阶段--Day3 阅读目录 今日进展 问题困难 明日任务 今日贡献量 TODOlist [今日进展] 密码算法方面: 参考了md5/sha1+salt和Bcrypt后,我们决定使 ...