CCF CSP 201703
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的更多相关文章
- CCF CSP 认证
参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...
- CCF CSP 201609-2 火车购票
题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...
- CCF CSP 201703-3 Markdown
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...
- CCF CSP 201312-3 最大的矩形
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...
- CCF CSP 201609-3 炉石传说
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...
- CCF CSP 201403-3 命令行选项
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...
- CCF CSP 201709-4 通信网络
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...
- CCF CSP 201409-3 字符串匹配
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...
- CCF CSP 201503-3 节日
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...
随机推荐
- 动态规划模板1|LIS最长上升子序列
LIS最长上升子序列 dp[i]保存的是当前到下标为止的最长上升子序列的长度. 模板代码: int dp[MAX_N], a[MAX_N], n; int ans = 0; // 保存最大值 for ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(尺取)题解
题意:n个城市,初始能量c,进入i城市获得a[i]能量,可能负数,去i+1个城市失去b[i]能量,问你能不能完整走一圈. 思路:也就是走的路上能量不能小于0,尺取维护l,r指针,l代表出发点,r代表当 ...
- FJNUOJ Yehan’s hole(容斥求路径数 + 逆元)题解
Description Yehan is a angry grumpy rabbit, who likes jumping into the hole. This day,Yehan jumps ag ...
- 论文笔记——NEURAL ARCHITECTURE SEARCH WITH REINFORCEMENT LEARNING
论文地址:https://arxiv.org/abs/1611.01578 1. 论文思想 强化学习,用一个RNN学一个网络参数的序列,然后将其转换成网络,然后训练,得到一个反馈,这个反馈作用于RNN ...
- 【TCP/IP详解 卷一:协议】第二十一章 TCP的超时与重传
作为TCP的重头戏,本章节涉及了许多关于计算方面的内容,使用了大量的例子来指明一些观点. 我使用的理解方法是:通过别人的博客,以及实例结合进行理解,不然会很吃力. 21.1 引言 reliable T ...
- UVa 127 纸牌游戏(栈)
https://vjudge.net/problem/UVA-127 题意: 按从左至右的顺序发牌,并摆成一行,发牌不要相互重叠.游戏中一旦出现任何一张牌与它左边的第一张或第三张“匹配”,即花色或点数 ...
- List<T>随机返回一个
/// <summary> /// 随机返回一条数据 /// </summary> /// <param name="list"></pa ...
- Redis 5种数据结构及其使用场景举例--STRING
String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshd ...
- Cocoapods 报警告Automatically assigning platform ios with version 9.0 on target....
Automatically assigning platform iOS with version 9.0 on target 你的工程名称 because no platform was speci ...
- docker运行python3.6+flask小记
docker新手. 目的:开发运行多个web api项目的时候,方便开发,兼顾部署. 方案大概这样: 1 隔离:系统运行在容器里,1容器只起1进程,代替在host起多个venv或虚拟机: 2调试和备份 ...