题目大意:改变一个数的位置 把一个序列变成不下降序列

题解:

设置一个pre,如果破坏单调性,就把‘删除’这个。否则把pre修改为当前元素的值。

考试时这样得了90分,是因为我的做法只能过这样的数据

1 3 4 1 5 7  (这个序列移动的数字是第二个1)

不能过这样的

1 3 6 100 7 9 10 (这个序列按我的做法移动的是7,但是应该是移去100)

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000009
using namespace std; int n,pre,tot,a[maxn]; inline int read(){
char ch=getchar();int x=,f=;
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';
return x*f;
} int main(){
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
n=read();pre=read();
for(int i=;i<=n;i++){
a[i]=read();
if(a[i]<pre){
tot++;
if(tot>){
printf("NO\n");
return ;
}
}
else pre=a[i];
}
printf("YES\n");
fclose(stdin);fclose(stdout);
return ;
}

90

正解

在序列不单调时有两种情况。

红色的表示在这个位置发现和前面的序列不能连起来了。那么我们枚举是删去红色的还是删去蓝色的。

我没有考虑到情况一导致GG,因为我每次删去的红的,而情况一删去蓝的就可以。哦,你不用管移去的数

插到哪里,反正一定移动后单调了。

#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 1000009
using namespace std;
int n,js,a[maxn];
bool no; inline int read(){
char ch=getchar();int x=,f=;
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';
return x*f;
} bool check(int pos){
for(int i=;i<=n;i++){
if(i==pos)continue;
if(i-==pos){
if(a[i]<a[i-])return false;
}else if(a[i]<a[i-])return false;
}
return true;
} int main(){
n=read();
for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<=n;i++){
if(a[i]<a[i-]){
if(check(i)||check(i-)){
}else {
no=true;break;
}
}
}
if(no)puts("NO\n");
else puts("YES\n");
return ;
}

AC

题解:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; int a1,b1,a2,b2,a3,b3,a4,b4; int main(){
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
scanf("%d%d%d%d%d%d%d%d",&a1,&b1,&a2,&b2,&a3,&b3,&a4,&b4);
for(register int i=;i<=;i++){
if((i-b1)%a1!=)continue;
if((i-b2)%a2!=)continue;
if((i-b3)%a3!=)continue;
if((i-b4)%a4!=)continue;
printf("%d\n",i);
fclose(stdin);fclose(stdout);
return ;
}
return ;
}

70暴力

对于30%的数据,枚举x。其实我70暴力就是枚举的x.

对于60%的数据,中国剩余定理.

对于100%的数据,用扩展欧几里德将式子合并.

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 5
#define ll long long
using namespace std;
ll n,m[N],a[N],m1,e;
ll read()
{
ll x=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-''; ch=getchar();}
return x*f;
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==)
{
x=,y=;
return a;
}
ll r=exgcd(b,a%b,x,y),tmp;
tmp=x,x=y,y=tmp-a/b*y;
return r;
}
ll crt()
{
ll a1=a[],a2,m2,d,c;m1=m[];
for(ll i=;i<=n;++i)
{
a2=a[i],m2=m[i];
c=a2-a1;ll x=,y=;
d=exgcd(m1,m2,x,y);
if(c%d) return -;
x=x*c/d;
int mod=m2/d;
x=(mod+x%mod)%mod;
a1+=m1*x;m1*=mod;
}
return a1;
}
int main()
{
// freopen("mod.in","r",stdin);
// freopen("mod.out","w",stdout);
n=;
for(int i=;i<=n;i++)
m[i]=read(),a[i]=read();
printf("%lld\n",crt());
return ;
}

AC

题解:

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 10009
using namespace std; int sumedge,len,tot,head[maxn],sum[maxn][];
char s[maxn]; struct Edge{
int x,y,nxt;
Edge(int x=,int y=,int nxt=):
x(x),y(y),nxt(nxt){}
}edge[maxn]; void add(int x,int y){
edge[++sumedge]=Edge(x,y,head[x]);
head[x]=sumedge;
} bool check(int l,int r){
while(l<r){
if(s[l++]!=s[r--])return false;
}
return true;
} bool ok(int l,int r){
for(int i=;i<=;i++){
for(int j=i+;j<=;j++){
int k=sum[r][i]-sum[l-][i];
int p=sum[r][j]-sum[l-][j];
if(k&&p&&k==p)return true;
}
}
return false;
} int main(){
freopen("str.in","r",stdin);
freopen("str.out","w",stdout);
scanf("%s",s+);len=strlen(s+);
for(int i=;i<=len;i++){
for(int j=;j<=;j++)sum[i][j]=sum[i-][j];
sum[i][s[i]-'a'+]++;
}
for(register int i=;i<=len;i++)
for(int j=i+;j<=len;j++)
if(check(i,j))add(i,j);
for(int x=;x<=len;x++){
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(ok(x,v))++tot;
}
}
printf("%d\n",tot);
fclose(stdin);
fclose(stdout);
return ;
}
/*abcbaabcba*/

30暴力

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std; typedef unsigned long long ULL;
typedef long long LL; char s[];
ULL h[],rh[],pw[];
int L; ULL hs(int l,int r){
return h[r]-h[l-]*pw[r-l+];
}
ULL rhs(int l,int r){
return rh[l] - rh[r+]*pw[r-l+];
}
struct N{
int a[];
bool ok(){
int b[];
for(int i=;i<;i++) b[i]=a[i];
sort(b,b+);
for(int i=;i<;i++){
if(b[i]>&& b[i] == b[i+]) return true;
}
return false;
}
void clear(){
memset(a,,sizeof a);
}
};
LL ans=;
map<ULL,LL> num;
map<ULL,N> A;
void solve_odd(){
for(int i=;i<=L;i++){
int l = ,r = min(i,L-i+)+;
while(r-l>){
int mid = (l+r)/;
if(hs(i-mid+,i+mid-)== rhs(i-mid+,i+mid-)) l=mid;
else r=mid;
}
int p=l;
int tmp = p;
while(tmp>=&&num.find(hs(i-tmp+,i+tmp-))==num.end()) tmp--;
LL sum = ;
N st;
st.clear();
if(tmp>=){
sum=num[hs(i-tmp+,i+tmp-)];
st = A[hs(i-tmp+,i+tmp-)];
}
while(tmp<p){
st.a[s[i+tmp]-'a']+= (tmp == ?:);
if(st.ok()) sum++;
num[hs(i-tmp,i+tmp)] = sum;
A[hs(i-tmp,i+tmp)] = st;
tmp++;
}
ans+=sum;
// printf("# %d %lld\n",i,sum);
}
}
void solve_even(){
A.clear();
num.clear();
for(int i=;i<L;i++){
// printf("### %d\n",i);
int l = ,r = min(i,L-i)+;
while(r-l>){
int mid = (l+r)/;
if(hs(i-mid+,i+mid)== rhs(i-mid+,i+mid)) l=mid;
else r=mid;
}
int p=l;
int tmp = p;
while(tmp>=&&num.find(hs(i-tmp+,i+tmp))==num.end()) tmp--;
LL sum = ;
N st;
st.clear();
// printf("## %d\n",p);
if(tmp>=){
sum=num[hs(i-tmp+,i+tmp)];
st = A[hs(i-tmp+,i+tmp)];
}
while(tmp<p){
// printf("# %d %lld\n",tmp,sum);
st.a[s[i+tmp+]-'a']+= ;
if(st.ok()) sum++;
num[hs(i-tmp,i+tmp+)] = sum;
A[hs(i-tmp,i+tmp+)] = st;
tmp++;
}
ans+=sum;
// printf("# %d %lld\n",i,sum);
}
} int main(){
freopen("str.in","r",stdin);
freopen("str.out","w",stdout);
scanf("%s",s+);
L=strlen(s+);
s[]='#';
pw[]=;
for(int i=;i<=L;i++) pw[i] = pw[i-]* ;
for(int i=;i<=L;i++) h[i] = h[i-]* + s[i];
for(int i=L;i>=;i--) rh[i] = rh[i+]* + s[i]; // printf("%llu %llu",hs(1,3),rhs(1,3)); solve_odd();
solve_even();
printf("%lld\n",ans);
fclose(stdout);
return ;
} 标称(字符串+二分)

AC

2017.10.6北京清北综合强化班DAY6的更多相关文章

  1. 2017.10.3北京清北综合强化班DAY3

    括号序列(bracket) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的 ...

  2. 2017.10.4北京清北综合强化班DAY4

    财富(treasure) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...

  3. 2017.10.7北京清北综合强化班DAY7

    1.计数 (count.cpp/c/pas) 时间限制:1s 内存限制:256MB [问题描述] 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍 ...

  4. 2017.10.5北京清北综合强化班DAY5

    拼不出的数lost.in/.out/.cpp[问题描述]3 个元素的集合{5, 1,2} 的所有子集的和分别是0,1, 2, 3, 5, 6, 7, 8.发现最小的不能由该集合子集拼出的数字是4.现在 ...

  5. 2017.10.1北京清北综合强化班DAY1

    a[问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx. 何大爷今天为字符串定义了新的权值计算方法.一个字符串 由小写字母组成,字符串 ...

  6. 2017.10.2北京清北综合强化班DAY2

    a[问题描述]你是能看到第一题的 friends呢.                                                —— hja世界上没有什么比卖的这 贵弹丸三还令人绝 ...

  7. 北京清北 综合强化班 Day4

    财富(treasure) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...

  8. 北京清北 综合强化班 Day3

    括号序列(bracket) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的 ...

  9. 北京清北 综合强化班 Day2

    a [问题描述] 你是能看到第一题的 friends呢.                                                —— hja世界上没有什么比卖的这 贵弹丸三还令 ...

随机推荐

  1. POJ1850&&POJ1496

    Code Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 9236   Accepted: 4405 Description ...

  2. WCF基础之序列化

    wcf是基于消息进行通信的,这篇就是简单说下序列化引擎是如何将.net object转化为xml消息.一般情况下很少用到这些,你只需定义数据协定之类的或者指定相应的序列化引擎,然后设置相应的特性就好. ...

  3. 九度OJ 1347:孤岛连通工程 (最小生成树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1522 解决:314 题目描述: 现在有孤岛n个,孤岛从1开始标序一直到n,有道路m条(道路是双向的,如果有多条道路连通岛屿i,j则选择最短 ...

  4. nginx访问日志中的时间格式修改

    1.说明 默认的时间格式是:[08/Mar/2013:09:30:58 +0800],由$time_local变量表示. 我想要改成如下格式:2013-03-08 12:21:03. 2.需要修改的文 ...

  5. 小程序发起post请求回调成功没有数据

    get请求时为 header:{ "content-type":'application/json' },POST 请求会将data的值放在Request Payload里面,而不 ...

  6. 栈 堆 stack heap

    点餐 做菜 Stack and Heap 堆和栈的区别 - Grandyang - 博客园 https://www.cnblogs.com/grandyang/p/4933011.html 在和计算机 ...

  7. 【python】-- 信号量(Semaphore)、event(红绿灯例子)

    信号量(Semaphore) 之前讲的线程锁(互斥锁) 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里 ...

  8. VS2017下编译iconv

    从http://www.gnu.org/software/libiconv/ 下载 libiconv-1.11.1, 这是最后一个支持MSVC编译的版本. 打开 Visual Studio 2017 ...

  9. NOIP考前划水

    NOIP考前划水 君指先跃动の光は.私の一生不変の信仰に.唯私の超電磁砲永世生き! 要开始背配置了? 3行不谢. (setq c-default-style "awk") (glo ...

  10. 【模式识别】CART和GML AdaBoost MATLAB TOOLBOX

    GML AdaBoost Matlab Toolbox是一款很优秀的AdaBoost工具箱,内部实现了Real AdaBoost, Gentle AdaBoost和Modest AdaBoost三种方 ...