2021国庆模拟赛|2021-10-04 模拟赛
国庆模拟赛(二)
-
- 1、[P1563 [NOIP2016 提高组] 玩具谜题](https://www.luogu.com.cn/problem/P1563)
- 2、[P2615 [NOIP2015 提高组] 神奇的幻方](https://www.luogu.com.cn/problem/P2615)
- 3、[P2827 [NOIP2016 提高组] 蚯蚓](https://www.luogu.com.cn/problem/P2827)
- 4、[P3960 [NOIP2017 提高组] 列队](https://www.luogu.com.cn/problem/P3960)
1、P1563 [NOIP2016 提高组] 玩具谜题 【2021国庆模拟赛|2021-10-04 模拟赛】算法思路:模拟
可能的解法:???
#include
using namespace std;
const int N=1e5+10;
int n,m,now=0;
int d[N];
string s[N];
int main(){ //freopen("toy.in","r",stdin);
//freopen("toy.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=0;
i>s[i];
}
while(m--){int dire,num;
scanf("%d %d",&dire,&num);
if(d[now]) num=-num;
if(dire) num=-num;
now=now+n-num;
while(now>=n) now-=n;
}
cout<[now];
return 0;
}
估分:100
实际得分:100
想法:大模拟,num正负左右横移 ,签到题。
(自认为写的还是比较短的)
2、P2615 [NOIP2015 提高组] 神奇的幻方 算法思路:大模拟 × \times × 2
可能的解法:???
#includeusing namespace std;
int a[50][50];
int n;
int main(){ //freopen("magic.in","r",stdin);
//freopen("magic.out","w",stdout);
scanf("%d",&n);
int tot=n*n-1;
a[1][n/2+1]=1;
int i=1,j=n/2+1;
while(tot--){if(i==1&&j!=n){i=n;
j++;
}
else if(j==n&&i!=1){j=1;
i--;
}
else if(i==1&&j==n){i++;
}
else if(a[i-1][j+1]==0){i--;
j++;
}
else{i++;
}
a[i][j]=n*n-tot;
}
for(int i=1;
i<=n;
i++){for(int j=1;
j<=n;
j++){printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
估分:100
实际得分:100
想法:模拟 × \times × 2
3、P2827 [NOIP2016 提高组] 蚯蚓 算法思路:感觉类似前缀和
可能的解法:优先队列
#includeusing namespace std;
int const N=8*1e6;
int n,m,q,u,v,t,qz;
double p;
int a[N];
int main(){ //freopen("earthworm.in","r",stdin);
//freopen("earthworm.out","w",stdout);
scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
p=(double)u/v;
for(int i=1;
i<=n;
i++){scanf("%d",&a[i]);
}
int cnt=n;
sort(a+1,a+cnt+1);
for(int i=1;
i<=m;
i++){int x=a[cnt]+qz;
if(i%t==0) printf("%d ",x);
int d1=floor(p*x);
int d2=x-floor(p*x);
cnt++;
a[cnt-1]=d1-qz-q;
a[cnt]=d2-qz-q;
sort(a+1,a+cnt+1);
qz+=q;
}
printf("\n");
for(int i=t;
i<=cnt;
i+=t){printf("%d ",a[cnt-i+1]+qz);
}
return 0;
}
估分:60
实际得分:35
一次订正(使用优先队列90pts)
#includeusing namespace std;
int n,m,q,u,v,t,qz;
double p;
priority_queue a;
int main(){ //freopen("earthworm.in","r",stdin);
//freopen("earthworm.out","w",stdout);
scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
p=(double)u/v;
for(int i=1;
i<=n;
i++){int x;
scanf("%d",&x);
a.push(x);
}
for(int i=1;
i<=m;
i++){int x=a.top()+qz;
if(i%t==0) printf("%d ",x);
int d1=floor(p*x);
int d2=x-floor(p*x);
a.pop();
a.push(d1-qz-q);
a.push(d2-qz-q);
qz+=q;
}
printf("\n");
for(int i=1;
i<=n+m;
i++){if(i%t==0){int x=a.top();
printf("%d ",x+qz);
}
a.pop();
}
return 0;
}
想法:高分易,满分难。
4、P3960 [NOIP2017 提高组] 列队 算法思路:模拟骗分
可能的解法:???
#includeusing namespace std;
int a[1010][30100];
int n,m,q;
int main(){ //freopen("phalanx.in","r",stdin);
//freopen("phalanx.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
for(int i=1;
i<=n;
i++){for(int j=1;
j<=m;
j++){a[i][j]=(i-1)*m+j;
}
}
while(q--){int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",a[x][y]);
int away=a[x][y];
for(int i=y;
i
估分:40
实际得分:30
想法:紫题万岁!
总得分
265/400
反思:基础数据结构要会用 (priority_queue不会写的悲伤)
蒟蒻的国庆模拟赛(二)
——2021.10.4
推荐阅读
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 2021-02-10(找不回的“年味”……)
- 2021-05-05五一的五天假期结束了
- 2021/1/15|2021/1/15 数幸福
- 何必出远门,喝茶亦是旅程!
- 20210307《挑战赛怂人胆》【能量将帅挑战赛(01)】
- 2020年,告别焦虑的自己,2021年,期待满意的自己。
- 今天开心的三件事(第454天,20210125,星期一,阴)
- 《我怎样教语文》读书打卡(十九)20210317
- 华杉版资治通鉴【1154】别人家的孩子,是中国人民永远的噩梦。2021-04-03