A: 孙壕请一盘青岛大虾呗

A题比较容易,因为范围只有10,所以暴力搜索一下就好了,简单递归题

 1 #include<cstdio>
 2 #include<cstring>
 3 int dfs(int n, int m, int num){
 4     if(n == 0 && m == 0 && num == 0){
 5         return 1;
 6     }
 7     if(n == -1 || m == -1 || num == 0) return 0;
 8     return dfs(n-1, m, num << 1) + dfs(n, m-1, num-1);
 9 }
10 int main(){
11     int n, m;
12     while(scanf("%d%d", &n, &m) != EOF){
13         printf("%d\n", dfs(n, m, 2));
14     }
15 }

View Code

B: 七龙珠

B题,简单的排序,不多说了,注意一下第7个数不要拿去排序就好了

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int a[7];
 5 int b[7];
 6 int work(){
 7     sort(a, a+6);
 8     sort(b, b+6);
 9     for(int i = 0; i < 7; i++){
10         if(a[i] != b[i]) return 0;
11     }
12     return 1;
13 }
14 int main(){
15     while(scanf("%d", &a[0]) != EOF){
16         for(int i = 1; i < 7; i++) scanf("%d", &a[i]);
17         for(int i = 0; i < 7; i++) scanf("%d", &b[i]);
18         puts(work() ? "yes" : "no");
19     }
20 }

View Code

C: String Game

C题,比较字符串,a字符串,与b字符串,可以证明的b字符串在a字符串中间,才是Alice赢,因为Bob从左边拿一个,Alice就可以从右边拿一个,Bob从右边拿一个,Alice就可以从左边拿一个,保证b字符串一直在a字符串中间,但是还有两种情况,就是如果有两个字符串与b匹配,那么只要这两个字符串关于a的中间对称,且两个字符串的位置差不超过2,那么也是Alice赢,因为,Bob拿完一个后,Alice可以在相同方向拿,所以字符串可以从中间向左(或右)偏移1格

比如

a:xxx

b:xx

a:xyxyxyx

b:xyxyx

这些都是Alice赢,那么只要for几遍比较一下就好了,具体见代码

 1 #include<cstdio>
 2 #include<cstring>
 3 char str1[500005];
 4 char str2[500005];
 5 int len1, len2;
 6 int work(){
 7     if(len1 < len2) return 0;
 8     int pos = (len1 - len2) >> 1;
 9     int flag;
10     if(len1 % 2 != len2 % 2){//奇偶不同
11         flag = 1;
12         for(int i = 0; i < len2; i++){
13             if(str2[i] != str1[pos+i]){
14                 flag = 0;
15                 break;
16             }
17         }
18         for(int i = 0; i < len2; i++){
19             if(str2[i] != str1[pos+i+1]){
20                 flag = 0;
21                 break;
22             }
23         }
24         if(flag == 1) return 1;
25     }
26     else{//奇偶相同
27         flag = 1;
28         for(int i = 0; i < len2; i++){
29             if(str2[i] != str1[pos+i]){
30                 flag = 0;
31                 break;
32             }
33         }
34         if(flag == 1) return 1;
35         if(len1 - len2 >= 2){
36             flag = 1;
37             for(int i = 0; i < len2; i++){
38                 if(str2[i] != str1[pos+i-1]){
39                     flag = 0;
40                     break;
41                 }
42             }
43             for(int i = 0; i < len2; i++){
44                 if(str2[i] != str1[pos+i+1]){
45                     flag = 0;
46                     break;
47                 }
48             }
49             if(flag == 1) return 1;
50         }
51     }
52     return 0;
53 }
54 int main(){
55     int T;
56     scanf("%d", &T);
57     while(T--){
58         scanf("%s%s", str1, str2);
59         len1 = strlen(str1);
60         len2 = strlen(str2);
61         puts(work() ? "Alice" : "Bob");
62     }
63 }

View Code

这代码更短,用string类

 1 #include<cstdio>
 2 #include<string.h>
 3 #include<iostream>
 4 using namespace std;
 5 int lena,lenb;
 6 string a,b;
 7 bool fun(){
 8     if(lena < lenb) return 0;
 9     int pos = (lena - lenb) >> 1;
10     if(lena % 2 != lenb % 2){
11         if(a.find(b,pos) == pos && a.find(b,pos+1) == pos+1 ) return 1;
12     }else{
13         if(a.find(b,pos) == pos) return 1;
14         if(lena - lenb >= 2)
15             if(a.find(b,pos-1) == pos-1 && a.find(b,pos+1)==pos+1) return 1;
16     }
17     return 0;
18 }
19 int main(){
20     int T;
21     scanf("%d",&T);
22     while(T--){
23         cin >> a >> b;
24           lena = a.length();
25         lenb = b.length();
26         puts(fun() ? "Alice" : "Bob");
27     }
28 }

View Code

D: One-Way Roads

我不会,我不会,我不会,重要的事要说三遍

请右拐至ACM群戳@12章铭铭

找铭铭姐教你

铭铭姐代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 #include <vector>
 5
 6 const int N = 50 + 5;
 7
 8 int head[N],etot;
 9 struct Edge {
10     int v,next;
11 } g[N * N];
12 int n,m;
13
14 bool vis[N * N];
15
16 void add_edge(int u,int v) {
17     g[etot].v = v; g[etot].next = head[u]; head[u] = etot ++;
18 }
19
20 std::vector<std::pair<int,int> > answer;
21
22 void dfs(int u) {
23     for (int &i = head[u]; i != -1; ) {
24         if (vis[i >> 1]) {
25             i = g[i].next;
26             continue;
27         }
28         int v = g[i].v;
29         vis[i >> 1] = true;
30         answer.push_back(std::make_pair(u,v));
31         i = g[i].next;
32         dfs(v);
33     }
34 }
35
36 bool graph[N][N];
37
38 bool work() {
39     answer.clear();
40     memset(vis,0,sizeof(vis));
41     dfs(0);
42     memset(graph,0,sizeof(graph));
43     for (int i = 0; i < answer.size(); ++ i) {
44         graph[answer[i].first][answer[i].second] = true;
45     }
46     for (int k = 0; k < n; ++ k)
47         for (int i = 0; i < n; ++ i)
48             for (int j = 0; j < n; ++ j)
49                 graph[i][j] |= graph[i][k] & graph[k][j];
50     for (int i = 0; i < n; ++ i) {
51         for (int j = 0; j < n; ++ j) {
52             if (i != j && graph[i][j] == false) {
53                 return false;
54             }
55         }
56     }
57     return true;
58 }
59
60 int main() {
61     int cas;
62     scanf("%d",&cas);
63     while (cas--) {
64         scanf("%d%d",&n,&m);
65         memset(head,-1,sizeof(head)); etot = 0;
66         for (int i = 0; i < m; ++ i) {
67             int a,b;
68             scanf("%d%d",&a,&b); a --; b --;
69             add_edge(a,b);
70             add_edge(b,a);
71         }
72         if (!work()) {
73             puts("NO");
74         } else {
75             puts("YES");
76             for (int i = 0; i < answer.size(); ++ i) {
77                 printf("%d %d\n",answer[i].first + 1,answer[i].second + 1);
78             }
79         }
80     }
81 }

View Code

E: Power Eggs

动态规划题

dp[i][j] = x

表示i个鸡蛋,扔j次,最多能够判断出多少楼层

因为我算了0层,所以最后用n+1比较

PS:这题要开longlong,否则会WA

 1 #include<cstdio>
 2 long long dp[35][35];
 3 int ans;
 4 long long n;
 5 int k;
 6 int main(){
 7     dp[0][0] = 1;
 8     for(int i = 1; i <= 32; i++){
 9         dp[i][1] = 2;
10         dp[1][i] = i+1;
11         dp[i][i] = dp[i-1][i-1] * 2;
12     }
13     for(int i = 2; i <= 32; i++){
14         for(int j = 2; j <= i; j++){
15             dp[i][j] = dp[j][j];
16         }
17         for(int j = i+1; j <= 32; j++){
18             dp[i][j] = dp[i][j-1] + dp[i-1][j-1];
19         }
20     }
21     int T;
22     scanf("%d", &T);
23     while(T--){
24         scanf("%lld%d", &n, &k);
25         ans = -1;
26         for(int i = 1; i <= 32; i++){
27             if(dp[k][i] >= n+1){
28                 ans = i;
29                 break;
30             }
31         }
32         if(ans == -1){
33             printf("Impossible\n");
34         }
35         else{
36             printf("%d\n", ans);
37         }
38     }
39 }

View Code

F: Landlocked

搜索题

bfs一遍,从海往中间标记路程就好了

最好把连在一起的块一起标记了

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<queue>
 5 using namespace std;
 6 queue <int> que[2];
 7 int n, m;
 8 char map[1005][1005];
 9 int vis[1005][1005];
10 int d[1005][1005];
11 int dd[256];
12 int dir[8][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
13 bool ok(int x, int y){
14     if(x < 0 || x >= n || y < 0 || y >= m || vis[x][y] == 1){
15         return false;
16     }
17     return true;
18 }
19 void dfs(int x, int y, int val, char letter, int p){
20     vis[x][y] = 1;
21     d[x][y] = val;
22     int ex, ey;
23     for(int i = 0; i < 8; i++){
24         ex = x + dir[i][0];
25         ey = y + dir[i][1];
26         if(ok(ex, ey)){
27             if(map[ex][ey] != letter){
28                 que[p].push(ex);
29                 que[p].push(ey);
30                 que[p].push(val + 1);
31             }
32             else{
33                 dfs(ex, ey, val, letter, p);
34             }
35         }
36     }
37 }
38 int main(){
39     while(scanf("%d%d", &n, &m) != EOF){
40         memset(vis, 0, sizeof(vis));
41         memset(dd, 0x3f, sizeof(dd));
42         for(int i = 0; i < n; i++){
43             scanf("%s", map[i]);
44         }
45         for(int i = 0; i < n; i++){
46             for(int j = 0; j < m; j++){
47                 if(map[i][j] == 'W'){
48                     que[0].push(i);
49                     que[0].push(j);
50                     que[0].push(-1);
51                 }
52             }
53         }
54         int x, y, val;
55         for(int i = 0; !que[i].empty(); i ^= 1){
56             while(!que[i].empty()){
57                 x = que[i].front(); que[i].pop();
58                 y = que[i].front(); que[i].pop();
59                 val = que[i].front(); que[i].pop();
60                 if(vis[x][y] == 1) continue;
61                 dfs(x, y, val, map[x][y], i^1);
62             }
63         }
64         /*for(int i = 0; i < n; i++){
65             for(int j = 0; j < m; j++){
66                 printf("%d\t", d[i][j]);
67             }
68             printf("\n");
69         }*/
70         for(int i = 0; i < n; i++){
71             for(int j = 0; j < m; j++){
72                 dd[(int)map[i][j]] = min(dd[(int)map[i][j]], d[i][j]);
73             }
74         }
75         for(int i = 0; i < 256; i++){
76             if(i == (int)'W') continue;
77             if(dd[i] == 0x3f3f3f3f) continue;
78             printf("%c %d\n", (char)i, dd[i]);
79         }
80     }
81 }

View Code

G: Jug Hard

通过推理可以发现,这题就是求a与b的最大公约数,然后看看d是不是这个约数的倍数

 1 #include<cstdio>
 2 int gcd(int a, int b){
 3     return b ? gcd(b, a%b) : a;
 4 }
 5 int main(){
 6     int T, a, b, d;
 7     scanf("%d", &T);
 8     while(T--){
 9         scanf("%d%d%d", &a, &b, &d);
10         puts(d % gcd(a, b) ? "No" : "Yes");
11     }
12 }

View Code

如果还有什么不懂的,请在ACM群戳我QQ,@14林煜竣

转载于:https://www.cnblogs.com/linyujun/p/5062241.html

题解---2015年浙江理工12月校赛相关推荐

  1. 2015浙江理工12月比赛A题

    题目: Problem A: 孙壕请一盘青岛大虾呗 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 380  Solved: 164 Descripti ...

  2. [BISTU校赛]12月12日校赛题解

    1001 1 /* 2 素数 打表 3 */ 4 #include <algorithm> 5 #include <iostream> 6 #include <ioman ...

  3. 2017年浙江理工大学程序设计竞赛校赛 题解源码(A.水, D. 简单贪心 ,E.数论,I 暴力)...

    Problem A: 回文 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1719  Solved: 528 Description 小王想知道一个字 ...

  4. 东北大学5月校赛c题

    Problem Description When you arrived at Charles de Gaulle airport, you naively accepted a ride to Pa ...

  5. 2017 山东理工第九届校赛 C 康纳的表情包

    传送门:点击打开链接 康纳的表情包 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description UMR ...

  6. 龙岩学院计算机二级报名时间,福建龙岩学院2015年12月计算机等级考试报名通知...

    福建龙岩学院2015年12月计算机等级考试报名通知 各学院: 根据上级有关文件通知,2015年12月福建省高校学生计算机应用水平等级考试开始报名,现将有关事项通知如下: 一.考试内容: 本次一.二考试 ...

  7. 2015年12月流量入口占比动态:仅直接访问实现上涨

    IDC评述网(idcps.com)01月27日报道:根据百度统计发布的最新数据显示,在2015年12月,国内流量入口浏览量占比五强排名情况,与11月相比,无变化.直接访问居首,占比环比上涨0.84%, ...

  8. python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...

    #!/usr/bin/env python3#coding:utf-8 '''Created on: 2015年12月30日 @author: 张晓宇 Email: 61411916@qq.com V ...

  9. 互联网晚报 | 12月22日 星期三 | 乐视宣布涨薪;小米12系列官宣12月28日发布;好未来推出全新品牌美校...

    ‍ ‍今日看点 ✦ 中国移动:A股IPO发行价57.58元/股,预计募资额560亿元 ✦ 小米12系列手机官宣12月28日正式发布,首发三款机型 ✦ 乐视宣布涨薪,全员信称今年实现经营利润和现金流双平 ...

最新文章

  1. 三极管的耐压与hFE之间是什么关系?
  2. 如何不编程,采集网站评论信息?(视频教程)
  3. Java怎么学?实用的学习路线图分享
  4. ubuntu 配置ftp server(zz)
  5. Android 节操视频播放器jiecaovideoplayer自定义播放音频使用:屏蔽全屏按钮,增加倒计时,当前时间/总时间
  6. loss function
  7. js监听只读文本框_js 动态控制 input 框 的只读属性
  8. 中英文对照 —— 游戏
  9. JSK-24 函数规律【基础】
  10. AI2XAML's Bug
  11. Linux_创建母版,快速克隆,如何移动虚拟机.ziw
  12. 软件测试哪些专业需要学习,软件测试工程师的入门级要求有哪些?
  13. SpringCloud2.0 集成分布式事务管理 LCN
  14. ROS学习之发布消息——Publisher_代码分析
  15. 管理员身份修改hosts文件
  16. typora 浏览器预览_Gitbook+Typora创建技术文档
  17. 一招判断云主机IP是不是原生IP
  18. CLUSTER 05: 块存储应用案例 分布式文件系统 对象存储
  19. python中怎么画一个机器猫_如何用Python画一只机器猫?
  20. swagger2搭配knife4j 隐藏实体类的属性/字段

热门文章

  1. Python | threading02 - 互斥锁解决多个线程之间随机调度,造成“线程不安全”的问题。
  2. 最新SSM完整模板(Spring+SpringMVC+MybatisPlus)
  3. mui 头部tab代码2
  4. 信息安全工程师笔记-网络攻击常见技术
  5. Java笔记-非对称加密RSA的使用
  6. Web前端笔记-two.js实现坐标定位(动画效果非瞬移定位)
  7. Web前端笔记-two.js图形旋转动画的2种实现方式
  8. WEB安全基础-URL跳转漏洞
  9. Php循环函数嵌套javascript,JS循环嵌套问题?
  10. mysql round 0.1111_听说Mysql你很豪横?-------------分分钟带你玩转SQL高级查询语句(库函数,存储过程)...