csp-j 复赛感想
2024-10-17 21:10:39
作者:博客园小蔡编程
这次是作者第一次参加csp-j的比赛
内心还是挺激动的
今天,作者就来和大家讨论一下这次csp-j的学习心得和感想
T1 分糖果
这题描述看似复杂
其实就是一道求最大取模的题
L<=k<=R
求k%n的最大值
有多种方法
作者这里目测100
#include <cstdio>
#define ll long long
ll n,l,r;
int main(){
freopen("candy.in","r",stdin);
freopen("candy.out","w",stdout);
scanf("%lld%lld%lld",&n,&l,&r);
ll m=l%n;
m=n-m-1;
if(l+m>r) printf("%lld",r%n);
else printf("%lld",n-1);
return 0;
}
T2 插入排序
着道题是经典的模拟
只要把插入排序换成二分就行了
但是作者比赛时为了更多的分数
先做后面的题,成功获得了大约120分
这题只拿了一半的分数
#include<bits/stdc++.h>
using namespace std; const int N=8e3+10;
int n,q;
struct node{
int n,d;
} a[N];
int p,v,u; int cr(int g){
node x[N];
for(int i=1;i<=n;i++){
x[i].n=i;
x[i].d=a[i].d;
}
for (int i = 1; i <= n; i++)
for (int j = i; j>=2; j--)
if ( x[j].d < x[j-1].d ){
int t=x[j].d;
int f=x[j].n;
x[j].d=x[j-1].d;
x[j].n=x[j-1].n;
x[j-1].d=t;
x[j-1].n=f;
}
int res;
for(int i=1;i<=n;i++)
if(x[i].n==g) {
res=i;
break;
}
return res;
} int main(){
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++) scanf("%d",&a[i].d),a[i].n=i;
for(int i=1;i<=q;i++){
scanf("%d",&p);
if(p==1){
scanf("%d%d",&v,&u);
a[v].d=u;
}else{
scanf("%d",&v);
printf("%d\n",cr(v));
}
}
//for(int i=1;i<=n;i++) printf("%d ",a[i].d);
return 0;
}
T3 网络连接
这题的数据量很弱,n<=1000,不会超时
但是这题的关键点在于判断IP是否正确
需要写很麻烦的if语句
比如说:10:2.3.1.2 (这IP作者一开始就没考虑到)
所以目测65分
#include <bits/stdc++.h>
using namespace std; const int N=1e3+10;
int n;
string op,ad;
int a,b,c,d,e;
int da[N][7],dal; int sop(string x){
int res[10],l=1;
int v=0;
for(int i=0;i<x.size();i++){
if(x[i]=='.'&&l<4) res[l++]=i;
else if(x[i]=='.'&&l==4) v=1;
else if(x[i]==':'&&l==4) res[l++]=i;
else if(x[i]==':'&&l!=4) v=1;
}
if(v) return 0;
a=0;
b=0;
c=0;
d=0;
e=0;
for(int i=0;i<res[1];i++){
a=a*10+int(x[i])-48;
if(a==0&&i==1) v=1;
}
for(int i=res[1]+1;i<res[2];i++){
b=b*10+int(x[i])-48;
if(b==0&&i==1) v=1;
}
for(int i=res[2]+1;i<res[3];i++){
c=c*10+int(x[i])-48;
if(c==0&&i==1) v=1;
}
for(int i=res[3]+1;i<res[4];i++){
d=d*10+int(x[i])-48;
if(d==0&&i==1) v=1;
}
for(int i=res[4]+1;i<x.size();i++){
e=e*10+int(x[i])-48;
if(e==0&&i==1) v=1;
}
if(a>255) v=1;
if(b>255) v=1;
if(c>255) v=1;
if(d>255) v=1;
if(e>65535) v=1;
if(v) return 0;
return 1;
} int sad(){
int v=0;
for(int i=0;i<dal;i++){
if(a==da[i][0]&&b==da[i][1]&&c==da[i][2]&&d==da[i][3]&&e==da[i][4]) {
v=i+1;
break;
}
}
if(v) return v;
return 0;
} int main(){
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
cin >> n;
for(int i=1;i<=n;i++){
cin >> op >> ad;
if(op=="Server"){
if(sop(ad)){
if(sad()==0){
da[dal][0]=a;
da[dal][1]=b;
da[dal][2]=c;
da[dal][3]=d;
da[dal][4]=e;
da[dal++][5]=i;
cout << "OK" << endl;
}
else{
cout << "FAIL" << endl;
}
}
else{
cout << "ERR" << endl;
}
}else{
if(sop(ad)){
int sadn=sad();
if(sadn){
cout << da[sadn-1][5] << endl;
}
else{
cout << "FAIL" << endl;
}
}
else{
cout << "ERR" << endl;
}
}
}
return 0;
}
T4 小熊的果篮
随便说一句:为什么去年和今年T4的主人公都是小熊?
这道题的关键点在读题
块有可能合并
所以要不断重新扫描块
作者用了前缀和来计算块
目测70分
#include <bits/stdc++.h>
using namespace std; const int N=2e5+10;
int n,m;
int a[N],c[N],g[N],b[N],k[N]; int main(){
freopen("fruit.in","r",stdin);
freopen("fruit.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
while(n>m){
int l=1;
for(int i=1;i<=n;i++){
if(g[i]==0) {
b[l++]=a[i];
k[l-1]=i;
}
}
for(int i=1;i<l;i++){
c[i]=1;
if(b[i]==b[i-1]&&i>1)c[i]=c[i-1]+1;
}
int v=0;
for(int i=1;i<l;i++){
if(c[i]==1) {
if(v) printf(" ");
v=1;
printf("%d",k[i]);
m++;
g[k[i]]=1;
}
}
printf("\n");
}
return 0;
}
感想
这次csp-j的数据都很良心
作者暴力枚举也能得很多分
而读题尤其重要
T3 IP的判断正误 和 T4 块的合并
不要考试时纠结一道题
可以先把所有题暴力做一遍,拿到分数,再优化
现在洛谷民间数据100+52+65+70
希望这次csp大家能考出好成绩
最新文章
- discuz教程:discuz模板js与jQuery冲突的解决方案
- django修改admin密码
- Wordpress-数据库结构分析(转)
- [原]Unity3D深入浅出 - 脚本开发基础(Scripts)
- maven 打包源文件
- Protel99se教程七:创建PCB元件封装
- POJ 1947 - Rebuilding Roads 树型DP(泛化背包转移)..
- 第一章ASP.NETMVC
- linux中fork()函数详解(转)
- sfs - django start from scratch
- css3快速复习
- .md即markdown文件的基本常用编写语法(图文并茂)
- 解决 Win10 UWP 无法使用 ss 连接
- 使用bat打开多个cmd窗口执行gulp、node
- Galaxian 小蜜蜂
- maven聚合工程无法install
- Postgresql - jsonb_pretty &; dateStyle
- IOS支持多国语言
- JS滚轮mousewheel事件和DOMMouseScroll事件
- odoo开发笔记--与微信集成