【比赛】STSRM 09
第一题
题意: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的更多相关文章
- 周赛-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) ...
- 周赛-Expression 分类: 比赛 2015-08-02 09:35 3人阅读 评论(0) 收藏
A. Expression time limit per test1 second memory limit per test256 megabytes inputstandard input out ...
- 周赛-Colored Sticks 分类: 比赛 2015-08-02 09:33 7人阅读 评论(0) 收藏
Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submissions: 32423 Accepted: 8556 Desc ...
- 周赛-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 ...
- 周赛-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 ...
- 周赛-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 ...
- Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012
[Info @09:03:33.737] ====================================================================[Info @ ...
- 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告
杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...
- 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次 ...
随机推荐
- scrapy(2)——scrapy爬取新浪微博(单机版)
Sina爬虫教程 Scrapy环境搭建 环境:window10 + python2.7(包含scrapy)+ mongoDB 1.1 安装集成了python2.7的anaconda ana ...
- DNS域名解析协议
一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服 ...
- PAT 甲级 1038 Recover the Smallest Number
https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704 Given a collection of ...
- 第四章 持续集成jenkins工具使用之项目配置
1.1 创建项目 点击“新建”,输入项目名称,选择“构建一个自由风格的软件项目”,点击ok,项目创建完成. 1.2 配置项目 点击步骤1创建的项目,进入项目页面,如图: 点击“配置”,进入配置 ...
- 普通用户如何启动WCF服务
做Winform项目时,部署到客户机上有两个应用程序,Host和Client,在Host上运行着WCF服务供Client调用.平时现在在测试的时候都没发现有问题,但是当安装到客户的正式环境时发现服务启 ...
- 【转载】input只改变光标的颜色 不改变字的颜色
转载 http://www.cnblogs.com/yangAL/p/6934608.html color: red; text-shadow: 0px 0px 0px #000; -webkit-t ...
- 【bzoj1700】Problem Solving 解题 dp
题目描述 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地说,他们有P (1 <= P <= 300) 道题目要做. 他们还离开了农场并且象普通人一 ...
- 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚 dp/线段树
题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...
- Codeforces Round #510 Div. 2 Virtual Participate记
这场打的顺手到不敢相信.如果不是vp的话估计肯定打不到这个成绩. A:最大显然,最小的话每次暴力给最小的+1. #include<iostream> #include<cstdio& ...
- Python os模块常用函数详解
当前使用平台: os.name #返回当前使用平台的代表字符,Windows用'nt'表示,Linux用'posix'表示 当前路径和文件 os.getcwd() #返回当前工作目录 os.listd ...