电子科技大学实验中学PK赛(一)比赛题解
比赛来源:第十四届重庆大学程序设计大赛暨西南地区高校邀请赛现场初赛
比赛地址: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赛(一)比赛题解的更多相关文章
- 电子科技大学实验中学PK赛(三)-期末测试比赛题解
比赛地址:http://qscoj.cn/contest/33/ A题 国家德比 分析:用b,d,B,D记录两场比赛两支球队的比分,先判断b+B与d+D的大小,如果先者大则拜仁胜,后者大则多特胜:相同 ...
- 电子科技大学实验中学PK赛(二)比赛题解
比赛地址:http://qscoj.cn/contest/27/ A题 FIFA强化 分析:这个题目要求说的比较明显,用几个if判断一下就好了.不要一判断完就输出,最好用一个ans储存下答案.输出答案 ...
- 杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告
杭州电子科技大学Online Judge 之 "确定比赛名次(ID1285)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozh ...
- 西安电子科技大学第16届程序设计竞赛 G-小国的复仇
西安电子科技大学第16届程序设计竞赛网络同步赛 G-小国的复仇 2 链接:https://www.nowcoder.com/acm/contest/107/G来源:牛客网 题目描述 众所周知,汀老师是 ...
- 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南
让我们跟着Jerry的文章,一起回到本世纪初那个单纯美好的年代. 2000年9月,Jerry告别了自己的高中时代,进入到自己心目中的电子游戏大学,开始了四年的本科生活.每个新生,都拿到了这样一本薄薄的 ...
- 使用pwn_deploy_chroot部署国赛pwn比赛题目
目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...
- 【科研】科研【合同】盖章流程/横向·非涉密/电子科技大学
[前置手续] 一.在科研管理系统里填单子,立项. 二.科研管理系统审核通过后,对于对面给好的合同,在合同系统里选择[合同业务发起-发起非标准合同],填单子. 三.会有一系列的审核,审核完成后打印合同备 ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- 纪中OJ 2019.02.15【NOIP提高组】模拟 B 组 梦回三国 比赛题解(第一个)
声明 旁边的同学小 H(胡)对我说: “哟,比赛拿了 140,强!要知道,如果哥第三题 AC 了,哥就 230 了,你个废柴!!!(比赛实际分数 130 额呵)” 顿时,千万草泥马从我心中奔腾而过:你 ...
随机推荐
- WPF 10天修炼 第八天 - 形状、画刷和变换
图形 在WPF中使用绘图最简单的就是使用Shape类.Shape类继承自FrameworkElement,是一个专门用来绘图的类.Shape类中年派生的类有直线.矩形.多边形和圆形等. System. ...
- 收藏一个可以学习javascript prototype的链接
https://github.com/mqyqingfeng/Blog/issues/2
- Mac 下GitHub 访问慢解决方案
1.GitHub下载是指向了Amazon的服务器 下载地址是http://github-cloud.s3.amazonaws.com/ 解决方案是更改host文件,使该域名指向香港的服务器 2.去 ...
- TopN案例
准备三份数据 t1 2067 t2 2055 t3 2055 t4 1200 t5 2367 t6 255 t7 2555 t8 12100 t9 20647 t10 245 t11 205 t12 ...
- 马拉车算法——求回文子串个数zoj4110
zoj的测评姬好能卡时间.. 求回文子串的个数:只要把p[i]/2就行了: 如果s_new[i]是‘#’,算的是没有中心的偶回文串 反之是奇回文串 /* 给定两个字符串s,t 结论:s,t不相同的第一 ...
- html网页引用中文字体,解决加载缓慢办法
[ttf 压缩]html网页引用中文字体,文件过大,加载缓慢的解决办法[字蛛][web font] [字蛛]http://font-spider.org/ 先安装好 NodeJS,然后执行: npm ...
- C# DataConstruct 数据结构关于 Array,ArrayList,List,HashTable,Dictionnary的学习记录
Array: 数组,开辟连续存储的内存存储数据.Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据 优点: 1.查询速度快,可以利用索引快速查询到对 ...
- RxJS操作符(三)
一.过滤类操作符:debounce, debounceTime 跟时间相关的过滤 debounceTime自动完成:性能,避免每次请求都往出发 ); debounce中间传入Observable co ...
- MyCat分片规则--笔记(二)
概述 myCat实现分库分表的策略,对数据量的处理带来很大的便利,这里主要整理下MyCat的使用以及常用路由算法,针对MyCat里面的事务.集群后续再做整理:另外内容整理,不免会参考技术大牛的博客,内 ...
- Nginx 静态页面POST 请求提示405 Not Allowed
从git上cp了一个开源的前端框架lay Ajax版本,用Nginx配置访问首页没问题 nginx配置如下: server { listen ; server_name adminhtml.com; ...