比赛来源:第十四届重庆大学程序设计大赛暨西南地区高校邀请赛现场初赛

比赛地址:http://qscoj.cn/contest/24/

A. Comb 自述

分析:统计ACM在题目描述中出现的次数,认真数一遍就好了,答案就是比赛标题中的14.

官方标程:

#include <cstdio>

int main() {
puts("");
return ;
}

我的AC代码:

#include<stdio.h>
int main()
{
printf("14\n");
return ;
}

B. Comb 数学

分析:超级水题,我们知道5的任何正数次方都是5,唯一的坑就是5的0次方是1,只要加一个判断就行。

官方标程:

#include <cstdio>

int main() {
int t; scanf("%d", &t);
while(t--) {
int x; scanf("%d", &x);
printf("%d\n", x ? : );
}
return ;
}

我的AC代码:

#include<stdio.h>
int main()
{
int T,x;
scanf("%d",&T);
while(T--)
{
scanf("%d",&x);
if (x) printf("5\n");
else printf("1\n");
}
return ;
}

C. Comb 找零

分析:题目里说Comb里的每个钱袋子都是2的x次幂,所以要正好凑成n数量的钱,就得将n转化为二进制统计其中1的数量,就是最少的钱袋数。当然,一个装2的x次幂的钱袋也可以拆成2个装2的x-1次幂的钱袋,但那样的话会让钱袋的数量更多。所以统计n转化成二进制其中1的数量就是最佳答案。注意n的数据范围为10^19,就比long long大了一点,我想用double发现精度会有问题,然后写了个高精度过了这个题,看了官方标程才想起还有unsigned long long这种东西。官方标程中的__builtin_popcountll(x)这个函数就是返回x转化成二进制后其中1的个数。

官方标程:

#include <cstdio>

int main() {
int t; scanf("%d", &t);
while(t--) {
unsigned long long x; scanf("%llu", &x);
printf("%d\n", __builtin_popcountll(x));
}
return ;
}

我的AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
int T,i,cnt,len;
int a[];
long long n,j;
string s,s0;
cin>>T;
s0="";
while(T--)
{
cin>>s;len=s.length();cnt=;
memset(a,,sizeof(a));
for(i=;i<len;i++)
a[len--i]=s[i]-;
if (len== || (len== && s>=s0))
{
cnt++;
for(i=;i<=;i++)
a[i]-=s0[-i]-;
for(i=;i<=;i++)
{
if (a[i]<) {a[i]+=;a[i+]--;}
}
}
j=1e18;n=;
for(i=;i>=;i--)
{
n+=j*a[i];
j/=;
}
for(i=;i>=;i--)
{
j=(1ll<<i);
cnt+=n/j;n%=j;
}
printf("%d\n",cnt);
}
return ;
}

D. Comb 寻路

分析:棋盘的大小不大,只有100*100,所以可以采用BFS的方法,用dp[i][j]记录点从起点到点(i,j)的最短时间,一开始将怪物及怪物周边的空地标为-1;将其他点标为inf,将起点标为0,从起点开始BFS.注意从空地到空地需要花费时间1,从空地到墙或从墙到空地需要花费时间2,从墙到墙需要花费时间3.搜索完毕后判断终点的dp[i][j]值,如果为-1或inf则输出“Oh, Comb can't go out”,否则就输出该答案。

官方标程:

//
// Created by TaoSama on 2017-05-01
// Copyright (c) 2017 TaoSama. All rights reserved.
//
#pragma comment(linker, "/STACK:102400000,102400000")
#include <bits/stdc++.h> using namespace std;
#define pr(x) cerr << #x << " = " << x << " "
#define prln(x) cerr << #x << " = " << x << endl
const int N = 1e2 + , INF = 0x3f3f3f3f, MOD = 1e9 + ; int n, m;
char s[N][N];
int f[N][N], in[N][N]; int main() {
#ifdef LOCAL
freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);
// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);
#endif
ios_base::sync_with_stdio(); int t; scanf("%d", &t);
while(t--) {
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i) scanf("%s", s[i] + ); int sx, sy, tx, ty;
static const int d[][] = { -, , , -, , , , };
auto inBound = [&](int x, int y) {
return x >= && x <= n && y >= && y <= m;
};
for(int i = ; i <= n; ++i) {
for(int j = ; j <= m; ++j) {
if(s[i][j] == 'C') sx = i, sy = j;
else if(s[i][j] == 'E') tx = i, ty = j;
else if(s[i][j] == 'M') {
for(int k = ; k < ; ++k) {
int x = i + d[k][], y = j + d[k][];
if(inBound(x, y) && s[x][y] == '*') s[x][y] = 'X';
}
}
}
} bool can = true;
for(int k = ; k < ; ++k) {
int x = sx + d[k][], y = sy + d[k][];
if(inBound(x, y) && s[x][y] == 'M') can = false;
}
for(int k = ; k < ; ++k) {
int x = tx + d[k][], y = ty + d[k][];
if(inBound(x, y) && s[x][y] == 'M') can = false;
}
if(!can) {puts("Oh, Comb can't go out"); continue;} queue<pair<int, int>> q; q.push({sx, sy});
memset(f, 0x3f, sizeof f);
memset(in, false, sizeof in);
f[sx][sy] = ; in[sx][sy] = true;
while(q.size()) {
int x, y; tie(x, y) = q.front(); q.pop();
in[x][y] = false;
for(int k = ; k < ; ++k) {
int nx = x + d[k][], ny = y + d[k][];
if(!inBound(nx, ny) || s[nx][ny] == 'X') continue;
int c = s[nx][ny] == '#' ? : ;
if(f[nx][ny] > f[x][y] + c) {
f[nx][ny] = f[x][y] + c;
if(!in[nx][ny]) in[nx][ny] = true, q.push({nx, ny});
}
}
}
if(f[tx][ty] == INF) puts("Oh, Comb can't go out");
else printf("%d\n", f[tx][ty]);
} return ;
}

我的AC代码:

#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
vector< pair<int,int> > v[];
int fx[]={-,,,};
int fy[]={,,-,};
int main()
{
int T,n,m,xc,yc,xe,ye,i,j,k,s;
int x,y,xx,yy,cnt;
int dp[][];
char c[][];
cin>>T;
while(T--)
{
cin>>n>>m;
for(i=;i<=n;i++)
for(j=;j<=m;j++)
dp[i][j]=inf;
for(i=;i<=;i++)
v[i].clear();
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
cin>>c[i][j];
if (c[i][j]=='C') {xc=i;yc=j;}
if (c[i][j]=='E') {xe=i;ye=j;}
}
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
if (c[i][j]=='M')
{
dp[i][j]=-;
for(k=;k<;k++)
{
xx=i+fx[k];
yy=j+fy[k];
if (xx< || xx>n || yy< || yy>m) continue;
if (c[xx][yy]=='#') continue;
dp[xx][yy]=-;
}
}
}
if (dp[xc][yc]==- || dp[xe][ye]==-)
{
printf("Oh, Comb can't go out\n");
continue;
}
v[].push_back(make_pair(xc,yc));dp[xc][yc]=;cnt=;
while()
{
for(i=;i<v[cnt].size();i++)
{
s=;x=v[cnt][i].first;y=v[cnt][i].second;
if (dp[x][y]<cnt) continue;
if (c[x][y]=='#') s++;
for(j=;j<;j++)
{
xx=x+fx[j];yy=y+fy[j];
if (xx< || xx>n || yy< || yy>m) continue;
if (dp[xx][yy]==-) continue;
if (c[xx][yy]=='#') s++;
if (dp[xx][yy]>cnt+s)
{
dp[xx][yy]=cnt+s;
v[cnt+s].push_back(make_pair(xx,yy));
}
if (c[xx][yy]=='#') s--;
}
}
if (cnt>= && !v[cnt].size() && !v[cnt-].size() && !v[cnt-].size()) break;
cnt++;
}
if (dp[i][j]==-) printf("Oh, Comb can't go out\n");
else printf("%d\n",dp[xe][ye]);
}
return ;
}

电子科技大学实验中学PK赛(一)比赛题解的更多相关文章

  1. 电子科技大学实验中学PK赛(三)-期末测试比赛题解

    比赛地址:http://qscoj.cn/contest/33/ A题 国家德比 分析:用b,d,B,D记录两场比赛两支球队的比分,先判断b+B与d+D的大小,如果先者大则拜仁胜,后者大则多特胜:相同 ...

  2. 电子科技大学实验中学PK赛(二)比赛题解

    比赛地址:http://qscoj.cn/contest/27/ A题 FIFA强化 分析:这个题目要求说的比较明显,用几个if判断一下就好了.不要一判断完就输出,最好用一个ans储存下答案.输出答案 ...

  3. 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告

    杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...

  4. 西安电子科技大学第16届程序设计竞赛 G-小国的复仇

    西安电子科技大学第16届程序设计竞赛网络同步赛 G-小国的复仇 2 链接:https://www.nowcoder.com/acm/contest/107/G来源:牛客网 题目描述 众所周知,汀老师是 ...

  5. 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南

    让我们跟着Jerry的文章,一起回到本世纪初那个单纯美好的年代. 2000年9月,Jerry告别了自己的高中时代,进入到自己心目中的电子游戏大学,开始了四年的本科生活.每个新生,都拿到了这样一本薄薄的 ...

  6. 使用pwn_deploy_chroot部署国赛pwn比赛题目

    目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...

  7. 【科研】科研【合同】盖章流程/横向&#183;非涉密/电子科技大学

    [前置手续] 一.在科研管理系统里填单子,立项. 二.科研管理系统审核通过后,对于对面给好的合同,在合同系统里选择[合同业务发起-发起非标准合同],填单子. 三.会有一系列的审核,审核完成后打印合同备 ...

  8. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  9. 纪中OJ 2019.02.15【NOIP提高组】模拟 B 组 梦回三国 比赛题解(第一个)

    声明 旁边的同学小 H(胡)对我说: “哟,比赛拿了 140,强!要知道,如果哥第三题 AC 了,哥就 230 了,你个废柴!!!(比赛实际分数 130 额呵)” 顿时,千万草泥马从我心中奔腾而过:你 ...

随机推荐

  1. WPF 10天修炼 第八天 - 形状、画刷和变换

    图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...

  2. 收藏一个可以学习javascript prototype的链接

    https://github.com/mqyqingfeng/Blog/issues/2

  3. Mac 下GitHub 访问慢解决方案

    1.GitHub下载是指向了Amazon的服务器 下载地址是http://github-cloud.s3.amazonaws.com/   解决方案是更改host文件,使该域名指向香港的服务器 2.去 ...

  4. TopN案例

    准备三份数据 t1 2067 t2 2055 t3 2055 t4 1200 t5 2367 t6 255 t7 2555 t8 12100 t9 20647 t10 245 t11 205 t12 ...

  5. 马拉车算法——求回文子串个数zoj4110

    zoj的测评姬好能卡时间.. 求回文子串的个数:只要把p[i]/2就行了: 如果s_new[i]是‘#’,算的是没有中心的偶回文串 反之是奇回文串 /* 给定两个字符串s,t 结论:s,t不相同的第一 ...

  6. html网页引用中文字体,解决加载缓慢办法

    [ttf 压缩]html网页引用中文字体,文件过大,加载缓慢的解决办法[字蛛][web font] [字蛛]http://font-spider.org/ 先安装好 NodeJS,然后执行: npm ...

  7. C# DataConstruct 数据结构关于 Array,ArrayList,List,HashTable,Dictionnary的学习记录

    Array: 数组,开辟连续存储的内存存储数据.Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据 优点: 1.查询速度快,可以利用索引快速查询到对 ...

  8. RxJS操作符(三)

    一.过滤类操作符:debounce, debounceTime 跟时间相关的过滤 debounceTime自动完成:性能,避免每次请求都往出发 ); debounce中间传入Observable co ...

  9. MyCat分片规则--笔记(二)

    概述 myCat实现分库分表的策略,对数据量的处理带来很大的便利,这里主要整理下MyCat的使用以及常用路由算法,针对MyCat里面的事务.集群后续再做整理:另外内容整理,不免会参考技术大牛的博客,内 ...

  10. Nginx 静态页面POST 请求提示405 Not Allowed

    从git上cp了一个开源的前端框架lay Ajax版本,用Nginx配置访问首页没问题 nginx配置如下: server { listen ; server_name adminhtml.com; ...