CCF CSP 2017·03

做了一段时间的CCF CSP试题,个人感觉是这样分布的

  • A、B题基本纯暴力可满分
  • B题留心数据范围
  • C题是个大模拟,留心即可
  • D题更倾向于图论?(个人做到的D题基本都是图论)
  • E题就是神仙打架了

A:分蛋糕

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define dd(x) cout<<#x<<'='<<x<<", "
#define de(x) cout<<#x<<'='<<x<<endl
typedef long long ll;
const int maxn = 1e5+5; int num[maxn]; int main()
{
int n,m;
scanf("%d%d",&n,&m);
rep(i,1,n+1) num[i] = i;
while(m--)
{
int p,q;
scanf("%d%d",&p,&q);
int pos = 1;
while(num[pos]!=p) pos++;
if(q>0){
for(int i=pos;i<pos+q;i++) num[i] = num[i+1];
num[pos+q] = p;
}
else{
for(int i=pos;i>pos+q;i--) num[i] = num[i-1];
num[pos+q] = p;
}
}
rep(i,1,n+1) printf("%d%c",num[i],i==n?'\n':' ');
}

B:学生排队

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define dd(x) cout<<#x<<'='<<x<<", "
#define de(x) cout<<#x<<'='<<x<<endl
typedef long long ll;
const int maxn = 1e5+5; int num[maxn]; int main()
{
int n,m;
scanf("%d%d",&n,&m);
rep(i,1,n+1) num[i] = i;
while(m--)
{
int p,q;
scanf("%d%d",&p,&q);
int pos = 1;
while(num[pos]!=p) pos++;
if(q>0){
for(int i=pos;i<pos+q;i++) num[i] = num[i+1];
num[pos+q] = p;
}
else{
for(int i=pos;i>pos+q;i--) num[i] = num[i-1];
num[pos+q] = p;
}
}
rep(i,1,n+1) printf("%d%c",num[i],i==n?'\n':' ');
}

C:Markdown

  • 段落之间分情况处理
  • 段内采用递归式处理(同一行写了好长,不好看...)
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define dd(x) cout<<#x<<'='<<x<<", "
#define de(x) cout<<#x<<'='<<x<<endl
typedef long long ll;
const int maxn = 1e5+5;
const int INF = 0x3f3f3f3f;
void open(){freopen("data.txt", "r", stdin);} // 单独处理每一行
string format_line(string str)
{
int len = str.size();
string res;
rep(i,0,len){
// 处理强调
if(str[i]=='_'){
int j = i+1;
while(str[j]!='_') j++;
// 递归处理
res = str.substr(0, i).append("<em>").append(format_line(str.substr(i+1, j-i-1))).append("</em>").append(format_line(str.substr(j+1, len-j-1)));
return res;
}
// 处理超链接
else if(str[i]=='['){
int j = i+1;
while(str[j]!=']') j++;
int p = j+1;
int q = p+1;
while(str[q]!=')') q++;
// 递归处理
res = str.substr(0, i).append("<a href=\"").append(format_line(str.substr(p+1, q-p-1))).append("\">").append(format_line(str.substr(i+1, j-i-1))).append("</a>").append(format_line(str.substr(q+1, len-q-1)));
return res;
}
}
return str;
} // 处理#打头的行
void func_comment(string line)
{
int len = line.size();
int cnt = 0;
int p = 0;
while(line[p]=='#' && p<len){
cnt++;
p++;
}
while(line[p]==' ' && p<len) p++;
cout<<"<h"<<cnt<<">"<<format_line(line.substr(p, len-p))<<"</h"<<cnt<<">"<<endl;
// 寻找第一个不是空格的位置
} // 处理*打头的行
void func_star(string line)
{
int len = line.size();
int p = 0;
while(line[p]==' ' || line[p]=='*') p++;
cout<<"<li>"<<format_line(line.substr(p,len-p))<<"</li>"<<endl;
} int main()
{
//open();
string line;
while(getline(cin, line))
{
bool newp = true;
bool newlist = true;
if(line.size()==0){
//puts("00000");
continue;
}
else if(line[0]=='#'){
//puts("######");
func_comment(line);
}
else if(line[0]=='*'){
//puts("*******");
puts("<ul>");
func_star(line);
// 连续不断输入 直到处理完无序列表
while(getline(cin, line))
{
if(line.size()>0 && line[0]=='*') func_star(line);
else break;
}
puts("</ul>");
}
else{
//puts("ppppppppp");
cout<<"<p>";
cout<<format_line(line);
bool flag = false;
while(getline(cin, line)){
if(line.size()==0){
flag = true;
cout<<"</p>"<<endl;
break;
}
cout<<endl;
cout<<format_line(line);
}
if(!flag) cout<<"</p>"<<endl;
}
}
}

D:地铁修建

  • 看走了眼本来还以为是个简单的“单源最短路”问题,仔细一看是“最小化路径上的最大值”问题
  • 直觉是max()函数拥有和加法一样的单调不减性质(非负数加法),可以直接在单源最短路径问题上修改
  • 也就是将dist[v] = dist[u] + cost变成dist[v] = max(dist[u], cost)
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define dd(x) cout<<#x<<'='<<x<<", "
#define de(x) cout<<#x<<'='<<x<<endl
typedef long long ll;
const int maxn = 1e5+5;
const int INF = 0x3f3f3f3f; struct Edge
{
int v;
int cost;
Edge(int _v=0, int _cost=0):v(_v), cost(_cost){}
}; vector<Edge> E[maxn];
void addedge(int u,int v,int w)
{
E[u].push_back(Edge(v,w));
}
bool vis[maxn];
int cnt[maxn];
int dist[maxn];
bool SPFA(int start, int n)
{
memset(vis, 0, sizeof(vis));
rep(i,1,n+1) dist[i] = INF;
vis[start] = true;
dist[start] = 0;
queue<int> que;
while(!que.empty()) que.pop();
que.push(start);
cnt[start] = 1;
while(!que.empty())
{
int u = que.front();
que.pop();
vis[u] = false;
rep(i,0,E[u].size()){
int v = E[u][i].v;
int cost = E[u][i].cost;
// 这里修改了两行
if(dist[v]>max(dist[u],cost)){
dist[v] = max(dist[u], cost);
if(!vis[v]){
vis[v] = true;
que.push(v);
if(++cnt[v]>n) return false;
}
}
}
}
return true;
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
int u,v,w;
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
SPFA(1,n);
printf("%d\n", dist[n]);
}

CCF CSP 201703的更多相关文章

  1. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...

  2. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  3. CCF CSP 201703-3 Markdown

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...

  4. CCF CSP 201312-3 最大的矩形

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...

  5. CCF CSP 201609-3 炉石传说

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...

  6. CCF CSP 201403-3 命令行选项

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...

  7. CCF CSP 201709-4 通信网络

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...

  8. CCF CSP 201409-3 字符串匹配

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...

  9. CCF CSP 201503-3 节日

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...

随机推荐

  1. bzoj1055 ||P4290 [HAOI2008]玩具取名

    目录 链接 思路 代码 链接 luogu bzoj 思路 区间dp 然后\(f[i][j][k]\) 区间\([i,j]\)能否变成\(k\)字符 (字符当然得转化一下) 字符的个数不多,直接暴力\( ...

  2. OI无关--关于侧边栏

    自己在比较闲的时候学了一点html和js,大概能写一些比较简单的东西了,于是就动起了侧边栏的念头. 如果能在博客里加一个题目快速跳转也很兹磁啊. 首先要选择题目,oj的名字肯定是不能直接输入,因为还有 ...

  3. redis持久化RDB和AOF-转载

    Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...

  4. Apache Kylin大数据分析平台的演进

    转:http://mt.sohu.com/20160628/n456602429.shtml 我是来自Kyligence的李扬,是上海Kyligence的联合创始人兼CTO.今天我主要来和大家分享一下 ...

  5. 关于PATH_INFO

    nginx支持PATH_INFO? 想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pathinfo不是nginx的功能,pathinfo是ph ...

  6. faster-rcnn 论文讲解

    Faster RCN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification ...

  7. MongoDB(课时6 关系查询)

    支持关系查询操作:大于($gt),小于($lt),大于等于($gte),小于等于($lte),不等于($ne ),等于(key:value 或 $eq).想让这些操作正常使用,需要准备一个数据集合. ...

  8. [ios][map]自定义地图标注

    参考:http://blog.csdn.net/mad1989/article/details/8794762 ios 一步一步学会自定义地图吹出框(CalloutView)-->(百度地图,高 ...

  9. 获取scrollTop始终为0问题

    $(obj ).scrollTop()获取为 0 解决思路: 1.不设置 obj 高度 div{ height:auto; } 2.强制还原高度 $(obj).css({"height&qu ...

  10. Python BeautifulSoup的使用

    2017-07-24 22:39:14 Python3 中的beautifulsoup引入的包是bs4 import requests from bs4 import * r = requests.g ...