第一题

题意:n个点,每个点坐标pi属性ai,从右往左将遇到的点向左ai范围内的点消除,后继续扫描。

现可以在扫描开始前提前消除从右往左任意点,问最少消除数(提前+扫描)。

n,pi,ai<=10^6

题解:很蠢的DP,我好蠢啊……

f[i]表示前i个的最少消除数(不含提前)

从左往右添加,每添加一个点x,它覆盖范围内的y个点失去作用,那么当前消除情况是f[x-y-1]+y,因为前面是不变的QAQ

简单的递推我都想半天……菜。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
/*------------------------------------------------------------*/
const int inf=0x3f3f3f3f,maxn=;
struct cyc{int p,num;}a[maxn];
int n,b[maxn],sum[maxn];
bool cmp(cyc a,cyc b)
{return a.p<b.p;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)a[i].p=read(),a[i].num=read(),a[i].p++;
sort(a+,a+n+,cmp);
int cnt=;sum[]=;
for(int i=;i<=maxn&&cnt<=n;i++)
{
sum[i]=sum[i-];
if(a[cnt].p==i){sum[i]++;cnt++;}
}
int ans=n;b[]=;
for(int i=;i<=n;i++)
{
int now=a[i].p-a[i].num-;
if(now<)now=;
b[i]=b[sum[now]]+sum[a[i].p]-sum[now]-;
ans=min(ans,b[i]+(n-i));
}
printf("%d",ans);
return ;
}

第二题

题意:给定a和b(两个正整数)加起来的结果和异或起来的结果,求a和b有几种搭配可能,ab不同时互换算两种。

a,b<=10^12

题解:x是和,y是异或答案

异或相当于每一位上进行不进位加法。

所以(x-y)>>1得到哪些位上做了进位,这些位上两个数都是1(y=0),只有一种可能。

一些位上y=0且不进位,这些位上两个数都是0,只有一种可能。

一些位上y=1,这些位上可以一数为0一数为1,有两种可能。

所以ans=2^(y中1的数量)。

但是还有一些不合法情况:

1.(x-y)的最低位不能是1,否则答案为0。

2.每一位上(x-y)>>1若是1则y必须也是0,否则答案为0。

3.x=y时答案-2,因为和与异或相等仅当不进位,不进位才可能出现0,此时不满足。

4.x<y时无解。

最后,记得1ll<<x!!!

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
/*------------------------------------------------------------*/
const int inf=0x3f3f3f3f; int n;
ll x,y,ans=;
int main()
{
scanf("%lld%lld",&x,&y);
ll num=x-y;
if(num&||x<y){printf("");return ;}
num>>=;
for(int i=;(1ll<<i)<=num;i++)if((num&(1ll<<i))&&(y&(1ll<<i))){printf("");return ;}
for(int i=;(1ll<<i)<=y;i++)
{
//printf("sfsdf");
if(y&(1ll<<i))ans=ans*;
//if((!y&(1<<i))&&(!num&(1<<i)))ans
}
if(x==y)ans-=;
printf("%lld",ans);
return ;
}

第三题

题意:给定数字串,每次可以删去一个回文子串,删去后两端拼接,求最少次数删去全串。串长<=500。

题解:大力DP,O(n^3),好强啊……你们怎么都会DP。

虽然一眼区间DP感觉,但仔细一想就觉得很复杂啊……其实只要搞清楚转移方式,DP就会帮你完成复杂的工作。

区间DP最大的特点是按区间长度从小到大枚举,具有最优子结构!

考虑这道题的多个消除的回文之间只有两种可能:嵌套||并列,不可能交叉,这使区间DP成为可能。

f[i][j]表示删除i~j的最少次数,h[i][j]表示i~j是否回文,有以下情况:

1.回文:h[i][j]=1,即区间回文,f[i][j]=1。

2.嵌套:a[i]=a[j],尝试从a[i+1][j-1],已知a[i+1][j-1]最后删除的一步是回文,所以两端的i和j可以直接附加上,即f[i][j]=min(f[i][j],f[i+1][j-1]),步步推进。

3.并列:枚举将区间分成两部分,f[i][j]=min(f[i][j],f[i][x]+f[x+1][j])。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=;
int n,f[maxn][maxn],a[maxn];
bool h[maxn][maxn];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
memset(f,0x3f,sizeof(f));
for(int i=;i<=n;i++)f[i][i]=h[i][i]=h[i][i-]=;
for(int p=;p<=n;p++){
for(int i=;i+p-<=n;i++){
int j=i+p-;
h[i][j]=h[i+][j-]&(a[i]==a[j]);
if(h[i][j])f[i][j]=;else{
if(a[i]==a[j])f[i][j]=f[i+][j-];
for(int x=i;x<j;x++)
f[i][j]=min(f[i][j],f[i][x]+f[x+][j]);
}
}
}
printf("%d",f[][n]);
return ;
}

【比赛】STSRM 09的更多相关文章

  1. 周赛-Killing Monsters 分类: 比赛 2015-08-02 09:45 3人阅读 评论(0) 收藏

    Killing Monsters Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...

  2. 周赛-Expression 分类: 比赛 2015-08-02 09:35 3人阅读 评论(0) 收藏

    A. Expression time limit per test1 second memory limit per test256 megabytes inputstandard input out ...

  3. 周赛-Colored Sticks 分类: 比赛 2015-08-02 09:33 7人阅读 评论(0) 收藏

    Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 32423 Accepted: 8556 Desc ...

  4. 周赛-The Number Off of FFF 分类: 比赛 2015-08-02 09:27 3人阅读 评论(0) 收藏

    The Number Off of FFF Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...

  5. 周赛-kiki's game 分类: 比赛 2015-08-02 09:24 7人阅读 评论(0) 收藏

    kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/10000 K (Java/Others) Total S ...

  6. 周赛-Clique in the Divisibility Graph 分类: 比赛 2015-08-02 09:02 23人阅读 评论(3) 收藏

    Clique in the Divisibility Graph time limit per test1 second memory limit per test256 megabytes inpu ...

  7. Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012

    [Info   @09:03:33.737] ====================================================================[Info   @ ...

  8. 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告

    杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...

  9. 1042 数字0-9的数量 1050 循环数组最大子段和 1062 序列中最大的数 1067 Bash游戏 V2 1092 回文字符串

    1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数.   比如 10-19,1出现11次 ...

随机推荐

  1. centOS6.5如何从启动界面直接进入命令行界面

    进入系统后,按Ctrl+Alt+Fn可以切换控制台,其中F1~F6是字符控制台,F7~F12是X控制台 如果启动直接进入字符控制台,而不是X Window,可以编辑/etc/inittab将id:5: ...

  2. [Leetcode] 2.Add Two Numbers(List To Long,模拟)

    本题题意是指将两个数倒序存储在链表中,再将两数之和同样存储在链表中输出. 我最开始的思路是将每一位相加,再考虑是否进位,但这时就需要考虑一些情况,比较麻烦. 于是我决定采取另一种在网上新学到的方法:这 ...

  3. 第52天:offset家族、scroll家族和client家族的区别

    一.offset家族 1.offsetWidth offsetHeight offsetLeft offsetTop offsetParent共同组成了offset家族,用来获取元素尺寸. offse ...

  4. 第45天:2017webstrom下载破解汉化

    1.webstrom 11.0.3下载地址1:http://pan.baidu.com/s/1kVQjcwf 密码:uggr 下载地址2:http://pan.baidu.com/s/1kVQjcwf ...

  5. 【Python】Python简易爬虫爬取百度贴吧图片

    通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...

  6. SQL查询数据总结

    SQL查询数据 完整语法 Select [select选项] 字段列表[字段别名]/* from 数据源 [where条件子句] [group by子句] [having子句] [order by子句 ...

  7. BZOJ4890 & 洛谷3761:[TJOI2017]城市——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4890 https://www.luogu.org/problemnew/show/P3761 从加 ...

  8. [Leetcode] Construct binary tree from inorder and postorder travesal 利用中序和后续遍历构造二叉树

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:  You may assume th ...

  9. 在Linux中新增与删除用户可以使用命令:Useradd

    在Linux中新增与删除用户可以使用命令:Useradd 我们先使用man命令理解一下Useradd的用法 新增与删除用户操作需要先获取高级用户权限 输入命令:sudo -i 确定后输入高级用户密码 ...

  10. HDU1166:敌兵布阵(线段树模板)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...