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”的形 ...
随机推荐
- P1600 天天爱跑步
lca真心不太会,这里只介绍60分做法,100的太难辣简单了就不介绍了 n<=1000 zz回溯爆搜 S[i]全部相等 这dfs序都不用lca的,2333,差分,然后输出判断一下是否是0(1到i ...
- LeetCode——Find Bottom Left Tree Value
Question Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: ...
- 【TCP/IP详解 卷一:协议】TCP的小结
前言:TCP学习的综述 在学习TCP/IP协议的大头:TCP协议 的过程中,遇到了很多机制和知识点,详解中更是用了足足8章的内容介绍它. TCP协议作为 应用层 和 网络层 中间的 传输层协议,既要为 ...
- 树莓派GPIO
- samba基本应用24-4及示例
samba smb:service message block(137/udp, 138/udp, 139/tcp, 445/tcp) 协议是:CIFS:Common Internet File Sy ...
- ubuntu server 多网卡
https://wenku.baidu.com/view/51fb15742f60ddccdb38a007.html
- ubuntu-server14.04 网络配置
一.启动网卡 ubuntu server 安装后,ifconfig 发现只有一个lo 和一个p1p1 网卡, 先查看服务器网卡:ifconfig -a ,发现有lo ,p1p1,p2p1,p3p1,p ...
- Java语言编写MD5加密方法,Jmeter如何给字符串MD5加密
package md5package; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; ...
- [ios]关于ios开发图片尺寸的建议
1.以后的应用程序,都使用AutoLayout, 不要再用绝对定位. 2.使用类似网页的方式来设计界面. 3.设计师好,程序员也好,尽量使用点这个单位进行思考,而不要使用像素.比如,你需要做44 x ...
- Java 常用对象-BigInteger类
2017-11-02 21:57:09 BigInteger类:不可变的任意精度的整数.所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型).BigInteger ...