您的位置:首页 > 其它

2017 NOIP 提高组模拟赛(四)Day2(计蒜客)

2017-10-16 20:47 351 查看
一、鬼脚图

原题:计蒜客

考试的时候先看错了题,很高兴,改了。

交了后错了,看了一下题,又看错了……

然后两分钟改完,崩了……

横线就是交换位置,在读入的时候把线两边得数交换一下就是最终序列。

最少横线数就是最终序列的逆序对个数。

Code:

#include<bits/stdc++.h>
#define M 1000005
using namespace std;
int B[M],A[M],ans;
void Sort(int l,int r){//归并排序求逆序对
if(l>=r)return;
int mid=(l+r)/2;
Sort(l,mid);Sort(mid+1,r);
int i=l,j=mid+1,k=l;
while(i<=mid&&j<=r){
if(A[i]<=A[j])B[k++]=A[i++];
else{
ans+=mid-i+1;
B[k++]=A[j++];
}
}
while(i<=mid)B[k++]=A[i++];
while(j<=r)B[k++]=A[j++];
for(int i=l;i<=r;i++)A[i]=B[i];
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)A[i]=i;
for(int i=1;i<=m;i++){
int x;
scanf("%d",&x);
swap(A[x],A[x+1]);//每条边交换
}
for(int i=1;i<=n;i++)printf("%d ",A[i]);
Sort(1,n);
printf("\n%d\n",ans);
return 0;
}


二、跑步爱天天

原题:计蒜客

暴力就每次把每个警卫都进行模拟,这样就是n^2。可以过60.

把图画出来,实际上发现从起点出发后,所能影响到的警卫就只有从起点到1这条路径上的点。那么就可以只判断这些点会不会影响到就行了。

判断要用dfs序,如果直接模拟求的话依旧是n^2,并没有什么改进。

然而我写的是卡过去的,改成用手打链表会快很多。

Code:

#include<bits/stdc++.h>
#define P(a) while(a isdigit(c=getchar()))
using namespace std;
void U(int &x) {int c;P(!);x=c-48;P()x=x*10+c-48;}
vector<int>edge[500005],D[500005];
int fa[500005],L[1000005],T,Q[1000005];
void Clear(){//多组数据要清空,少一个都不行
memset(fa,0,sizeof fa);
memset(L,0,sizeof L);
memset(Q,0,sizeof Q);
T=0;
}
void f(int x){
L[x]=++T;D[x].push_back(T);//D存的是每个点在这个循环序列出现的每个位置
for(int i=0;i<(int)edge[x].size();i++){
int y=edge[x][i];
fa[y]=x;
f(y);
D[x].push_back(++T);
}
}
int main(){
int cas;U(cas);
while(cas--){
int n;U(n);
for(int i=1;i<=n;i++){
int x;U(x);
for(int j=1;j<=x;j++){
int y;U(y);
edge[i].push_back(y);
}
}
f(1);
int st;U(st);
for(int i=st;i!=0;i=fa[i])Q[L[i]]=1;//把走到的点标记掉
int t=0,ans=0;//t是走了的时间
for(int i=st;i!=0;i=fa[i]){
for(int j=0;j<(int)D[i].size();j++){
int nxt=D[i][j]-t;
if(nxt<=0||Q[nxt]==0)continue;//走过的或不能走的
ans++;Q[nxt]=0;
}
t++;
}
printf("%d\n",ans);
Clear();
for(int i=1;i<=n;i++)edge[i].clear(),D[i].clear();
}
return 0;
}


这样960多,改成链表后再改一些细节,最快的是200多。

三、神奇的三角形

原题:计蒜客

玄学的题目。

至今还没有A掉,不会啊………………

不会还写题解??

所以用别人的。

别人的就不放了,内部的都知道,反正我还不会…………

今天感觉就像是在梦游(头痛)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: