放在前面:各位同学一定要好好复习初赛……不要像我一样初赛都没过……


1.P7909

作为第一题……肯定不会很难(我还是卡了一下TAT)

可以想到输出的结果一定是  0~(n-1)

关键在于是判断输出n-1还是其他

  1. L到R之间的区间超过n      输出(n-1)
  2. L到R之间的区间小于n      输出最大解(r%n)

上代码:

#include<bits/stdc++.h>using namespace std;int n,l,r,a,b;int main()
{cin>>n>>l>>r;a=l/n;b=r/n;//判断区间if(a==b) cout<<r%n;elsecout<<n-1;return 0;
}

理解一下应该不太难(相比于其他题解做法,这个要讨论的情况不会太多,不容易出错)


2.P7910

这道题的题目理解相对难一(hen)点(duo)

关键在于选择排序是个稳定排序(复习一下初赛知识——稳定排序有:希尔选择快速堆

还有就是解决超时问题

H 老师不喜欢过多的修改,所以他保证类型 1 的操作次数不超过 5000。

所以我们选择对类型1下手……!

关键点:操作类型1时顺便排序

还有就是一些……奇奇怪怪的错误

代码(虽然代码写的繁琐,但是思路还是很明确的……其实是我太菜):

#include<iostream>
#include<fstream>
#include<algorithm>using namespace std;int n,m,kind,x,v,ans;
struct number
{int a,ans;
}p[8005],b[8005];//b数组是为了方便转换//p.a保存原数组
//p.ans是保存排序后的下标
//b为排序后的数组
//b.ans是排序前的下标(用于转换)
bool cmp(number x,number y)//sort
{if(x.a!=y.a) return x.a<y.a;elsereturn x.ans<y.ans;
}
bool r(number x,number y)//十分繁琐的判断是否可以交换
{if(x.a==y.a) return x.ans>y.ans;return x.a>y.a;//稳定排序下标也需要比较
}
bool l(number x,number y)//十分繁琐的判断是否可以交换
{if(x.a==y.a) return x.ans<y.ans;return x.a<y.a;//稳定排序下标也需要比较
}
void right()
{b[p[x].ans].a=v;for(int k=p[x].ans;k<n;k++){if(r(b[k],b[k+1]))//码代码小tip:当判断十分繁琐……再用一个函数写也不是不可以//(我这里调了好久)swap(b[k],b[k+1]);   }for(int i=1;i<=n;i++) p[b[i].ans].ans=i;//转换说的就是这里
}
void left()
{b[p[x].ans].a=v;for(int k=p[x].ans;k>1;k--){if(l(b[k],b[k-1]))//码代码小tip:当判断十分繁琐……再用一个函数写也不是不可以//(我这里调了好久)swap(b[k],b[k-1]);   }for(int i=1;i<=n;i++) p[b[i].ans].ans=i;//转换说的就是这里
}/*
right和left其实是对称的
有木有……!有木有……!连注释都一毛一样……!!!
*/int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&p[i].a),b[i].a=p[i].a,b[i].ans=i;//转换sort(b+1,b+1+n,cmp);//开头那个排序for(int i=1;i<=n;i++) p[b[i].ans].ans=i;//再转换for(int i=1;i<=m;i++){scanf("%d",&kind);if(kind==1){scanf("%d%d",&x,&v);//核心代码排序(其实这里可以用一个sort直接解决【如开头那个排序】……//为什么不用后文会提到if(v>p[x].a)right();if(v<p[x].a)left();p[x].a=v;//数据记得变}if(kind==2){scanf("%d",&x);    printf("%d\n",p[x].ans);//输出}}return 0;//完美结束
}

回到排序的问题(为什么不用sort直接解决?)

当然是因为超时呀……!

思考一下:

其实b数组一直都是有顺序的

当你改变某个元素的值时……你只需要判断它去那个位置就ok了

所以就有了那段繁琐的 left right

其实我的代码是比较……丑陋的(蒟蒻)


3.P7911

这道大模拟着实没有意义……直接看代码吧(可以说比较清晰了)

写了  的代码:

#include<iostream>
#include<fstream>
#include<string.h>
#include<map>
#include<algorithm>using namespace std;int n;
string kind,save,num,str;
char s;
map<string,int> cc;bool abcd(string f)
{if(f.size()<=2&&f>="0") return true;if(f<="255"&&f.size()==3) return true;return false;
}bool e(string f)
{if(f.size()<=4&&f>="0") return true;if(f<="65535"&&f.size()==5) return true;return false;
}int ERR()
{cin>>str;int i=0;num="";while(str[i]>='0'&&str[i]<='9')num=num+str[i],i++;if(num[0]=='0'&&num.size()!=1) {return -1;}if(abcd(num)==false){return -1;}save=save+num;s=str[i];if(s!='.'){return -1;}save=save+s;i++;num="";while(str[i]>='0'&&str[i]<='9')num=num+str[i],i++;if(num[0]=='0'&&num.size()!=1) {return -1;}if(abcd(num)==false){return -1;}save=save+num;s=str[i];if(s!='.'){return -1;}save=save+s;i++;num="";while(str[i]>='0'&&str[i]<='9')num=num+str[i],i++;if(num[0]=='0'&&num.size()!=1) {return -1;}if(abcd(num)==false){return -1;}save=save+num;s=str[i];if(s!='.'){return -1;}save=save+s;i++;num="";while(str[i]>='0'&&str[i]<='9')num=num+str[i],i++;if(num[0]=='0'&&num.size()!=1) {return -1;}if(abcd(num)==false){return -1;}save=save+num;s=str[i];if(s!=':'){return -1;}save=save+s;i++;num="";while(str[i]>='0'&&str[i]<='9'&&i<=str.size()-1)num=num+str[i],i++;if(num[0]=='0'&&num.size()!=1) {return -1;}if(e(num)==false){return -1;}save=save+num;if(i!=str.size()){return -1;}return 0;//一定要记得!!!
}int FAILS(int w)
{if(cc[save]!=0) return -1;elsecc[save]=w;return 0;//一定要记得!!!
}int FAILC()
{if(cc[save]==0) return -1;return 0;//一定要记得!!!
}int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>kind;save="";if(kind=="Server"){if(ERR()==-1){cout<<"ERR"<<endl;continue;}if(FAILS(i)==-1){cout<<"FAIL"<<endl;continue;}cout<<"OK"<<endl;       }if(kind=="Client"){if(ERR()==-1){cout<<"ERR"<<endl;continue;}if(FAILC()==-1){cout<<"FAIL"<<endl;continue;}cout<<cc[save]<<endl;           }}return 0;
}

这是一个因为没加 return 0 而导致的惨案

我甚至写了个对拍程序……(检查大数据)

特别感谢 @ EdisonBa  帮我纠错……%

讨论指引……感兴趣可以康康http://luogu.com.cn/discuss/374673

同学们返回一定一定要加返回值啊……爆0惨案刻骨铭心……


4.P7912

怎么说……我还没有过……QWQ

(队列做法看起来似乎是正解,提交却超时QWQ)

思路:外面一层队列存放块,里面再用队列存水果

瞄了眼题解……似乎差不多呀……?

70分代码:

#include<iostream>
#include<fstream>
#include<string.h>
#include<queue>
#include<algorithm>using namespace std;struct kkk
{queue<int> a;//水果 queue<int> b;//水果ID int last;//最后一个水果
}w;
void clear(queue<int>& q)
{queue<int> empty;swap(empty, q);
}//清空队列
int n,v,tt;
queue<kkk> q;//块
void defi()
{clear(w.a);clear(w.b);w.last=0;
}//清空w(这里应该会有更好的方法……奈何我太菜了) int main()
{scanf("%d",&n);defi();scanf("%d",&v);w.a.push(v);w.b.push(1);w.last=v;for(int i=2;i<=n;i++){scanf("%d",&v);if(v==w.last){w.a.push(v);w.b.push(i);w.last=v;}else{q.push(w);defi();w.a.push(v);w.b.push(i);w.last=v;}}q.push(w);kkk tail;tail.last=555;q.push(tail);//水果链的结尾(用于换行 tt=-1;while(q.size()>1){kkk s=q.front();q.pop();if(s.last==555)//换行 {printf("\n");tt=5;q.push(s);continue;}if(s.a.front()!=tt)//与前面的块不能合并 {printf("%d ",s.b.front());tt=s.a.back();s.a.pop();s.b.pop();      }if(s.a.empty()==false) q.push(s);//这个块水果拿完了 }return 0;
}
//似乎是O(n)做法……为啥超时TAT 

然后……就没有然后了(可以看看帖子)

讨论指路https://www.luogu.com.cn/discuss/374841


没过初赛的惨案……ε=(´ο`*)))唉

CCF ta没有心

CSP-J 2021解题报告相关推荐

  1. openoj的一个小比赛(J题解题报告)poj1703(并查集)

    http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=47#problem/J http://poj.org/problem?id ...

  2. 联合省选 2021 解题报告

    很久没有写过博客了呢. 文章目录 D1T1 - 卡牌游戏 D1T2 - 矩阵游戏 D1T3 - 图函数 D2T1 - 宝石 D2T2 - 滚榜 D2T3 - 支配 B卷D1T1 - 数对 B卷D2T1 ...

  3. 【解题报告】2021牛客寒假算法基础集训营4

    [解题报告]2021牛客寒假算法基础集训营4 前面的话 A :九峰与签到题 | 模拟 (签到题) B: 武辰延的字符串 | exKMP D :温澈滢的狗狗 | 二分 E: 九峰与子序列 | d p d ...

  4. 湖南师范大学2021年4月1日愚人赛解题报告与标程

    湖南师范大学2021年4月1日愚人赛解题报告与标程 A 题目描述 标程 B 题目描述 标程 C 题目描述 标程 D 题目描述 解法 标程 E 题目描述 解法 F 题目描述 解法 标程 G 题目描述 标 ...

  5. 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案

    2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...

  6. NJU 2021 计算机拔尖(数学)测试 解题报告

    NJU 2021 计算机拔尖(数学)测试 解题报告 试题链接, 万分感谢 Fiddie 大佬提供试题!!! 因为要准备 2022 计算机拔尖所以稍微写了一下,感觉难度很大. 1 题目 设自然数 n&g ...

  7. 2021字节跳动校招秋招算法面试真题解题报告--leetcode148 排序链表,内含7种语言答案

    148.排序链表 1.题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序 2.解题报告 针对nlogn的排序算法,主要有快速排序,归并排序和堆排序.其中,堆排序利用了数 ...

  8. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  9. Codeforces Round #697 (Div. 3)A~G解题报告

    Codeforces Round #697 (Div. 3)A~G解题报告 题 A Odd Divisor 题目介绍 解题思路 乍一想本题,感觉有点迷迷糊糊,但是证难则反,直接考虑没有奇数因子的情况, ...

最新文章

  1. 40个姿态估计优秀开源项目汇总
  2. Mac写文件到U盘的方法
  3. MySQL性能优化(八)
  4. 自定义服务器控件(扩展现有 Web 控件)
  5. 【LiveVideoStack线上分享】— 海外复杂网络环境下的视频播放体验优化
  6. 从明面上学习ASP.NET Core
  7. 微信小程序的一些数据调用方式
  8. 高性能MySQL—第一章 MySQL架构与历史
  9. 6 个快速学会 JavaScript 的秘诀!
  10. 交通监控系统服务器配置,监控系统服务器的配置
  11. 1.1.2 Greedy Gift Givers 贪婪的送礼者
  12. 吾之工作要求:死板,教条,僵化
  13. c语言实验报告模板电子版,c语言实验报告模板1.pdf
  14. 怎样快速查询单号物流信息,筛选出未签收的单号
  15. 一个爬取图片的app
  16. 1583个mms电台列表
  17. 解决QT-mingw32编译“ too many sections(...)”问题
  18. 腾讯广告算法大赛2019
  19. Java日志框架:Logback
  20. ffmpeg 音乐循环_自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏

热门文章

  1. oracle中wip差异原因,WIP 工费差异--月末分摊
  2. 递归树-分析时间复杂度
  3. 大赛之Windows+iis+php+mysql搭建wordpress
  4. ubuntu 软连接建立
  5. 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)
  6. 收藏这几个免版权高清图片搜索网站,找高清图片素材更方便
  7. STC32G 单片机EEPROM 操作实例
  8. 一哥答疑:数据工程师的出路在哪?
  9. lcd4linux亮度,Android LCD和键盘 背光亮度设置
  10. android齐刘海屏幕适配,GitHub - biganans/cocos2x-adaptation: cocos2dx 横版各种适配 iphoneX适配 齐刘海 凹凸屏...