20130830组队赛-Regionals 2012, Asia - Jakarta

2024-05-04 19:48

本文主要是介绍20130830组队赛-Regionals 2012, Asia - Jakarta,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天的题目有几道水题,还有图论,计算等等

 

A. Grandpa's Walk

 

算是一道水题吧,就是搜索,比赛的时候没有写,后来写的时候咋都不出样例,奇了怪了。找了好久,竟然是两个地方

写错变量名字了,。题目就是从一个点(这个点周围的点都必须小于等于这个点的高度)开始DFS,一直找比他低的

点,一直找到没有可延伸的了那么就是一条最长路径了。

 

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int gcd(int  n,int  m)
{if(n<m) swap(n,m);return n%m==0?m:gcd(m,n%m);
}
int  lcm(int  n,int  m)
{if(n<m) swap(n,m);return n/gcd(n,m)*m;
}
#define N 55
int prime[N];
struct node
{int x, y;
};
bool cmp(const node & a, const node & b)
{return a.x > b.x;
}
void getPrime();
void bash();
void wzf();
void SG();
int QuickMod(int a, int b, int n);
int mp[N][N];
int vis[N][N];
int t;
int n, m;
int inmap(int x, int y)
{if(x < 0 || x >= n || y < 0 || y >= m)return false;return true;
}
int dir[4][2] = {{-1,0}, {0, 1}, {1, 0}, {0, -1}};
int MAX = 0;
void DFS(int x, int y)
{int flag = 0;for(int i = 0; i < 4; ++i){int xx = x+ dir[i][0];int yy = y + dir[i][1];if(inmap(xx, yy)&&mp[xx][yy] < mp[x][y]){flag = 1;DFS(xx, yy);}}if(flag == 0)MAX++;
}
int main()
{scanf("%d", &t);int cnt = 0;while(t--){cnt++;MAX = 0;mem(mp, 0);mem(vis, 0);scanf("%d%d", &n, &m);for(int i = 0; i < n; ++i)for(int j = 0; j < m; ++j)scanf("%d", &mp[i][j]);int fp = 0;for(int i = 0; i < n; ++i){for(int j = 0; j < m; ++j){fp = 0;for(int k = 0; k < 4; ++k){int xx = i+dir[k][0];int yy = j+dir[k][1];if(inmap(xx, yy) && mp[xx][yy] > mp[i][j]){fp = 1;break;}}if(fp == 0){DFS(i, j);}}}printf("Case #%d: %d\n", cnt, MAX);}return 0;
}int QuickMod(int  a,int b,int n)
{int r = 1;while(b){if(b&1)r = (r*a)%n;a = (a*a)%n;b >>= 1;}return r;
}void getPrime()
{memset(prime, 0, sizeof(prime));prime[0] = 1;prime[1] = 1;for(int i = 2; i < N; ++i){if(prime[i] == 0){for(int j = i+i; j < N; j+=i)prime[j] = 1;}}
}void bash(int n, int m)
{if(n%(m+1) != 0)printf("1\n");elseprintf("0\n");
}void wzf(int n, int m)
{if(n > m)swap(n, m);int k = m-n;int a = (k * (1.0 + sqrt(5.0))/2.0);if(a == n)printf("0\n");elseprintf("1\n");
}int numsg[N];
void SG(int n)
{int sum = 0;for(int i=0; i < n; i++){scanf("%d",&numsg[i]);sum ^= numsg[i];}if(sum == 0)printf("No\n");else{printf("Yes\n");for(int i = 0; i < n; i++){int s = sum ^ numsg[i];if(s < numsg[i])printf("%d %d\n", numsg[i], s);//从有num[i]个石子的堆后剩余s个石子}}
}


 

C. Stop Growing!

 

C题一开始就被纷纷水过,我也来写了,也没什么就是计算....

 

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int gcd(int  n,int  m)
{if(n<m) swap(n,m);return n%m==0?m:gcd(m,n%m);
}
int lcm(int n,int m)
{if(n<m) swap(n,m);return n/gcd(n,m)*m;
}
#define N 10000007
int prime[N];
struct node
{int x, y;
};
bool cmp(const node & a, const node & b)
{return a.x > b.x;
}
void getPrime();
void bash();
void wzf();
void SG();
int QuickMod(int a, int b, int n);int num[6][2];
int M;
int main()
{int t;scanf("%d", &t);int cnt = 0;while(t--){cnt++;mem(num, 0);int sum1 = 0, sum2 = 0;for(int i = 1; i <= 5; ++i){scanf("%d", &num[i][0]);sum1 += num[i][0];}scanf("%d", &M);if(sum1 >= M){printf("Case #%d: 0\n", cnt);continue;}int fp = 0;int ans = 0;while(1){ans ++;fp = 1-fp;sum2 = 0;for(int i = 1; i <= 5; ++i){if(i == 5)num[i][fp] = num[i][1-fp] + num[1][1-fp];elsenum[i][fp] = num[i][1-fp] + num[i+1][1-fp];sum2 += num[i][fp];}if(sum2 >= M){printf("Case #%d: %d\n", cnt, ans);break;}if(sum2 <= sum1){printf("Case #%d: -1\n", cnt);break;}sum1 = sum2;}}return 0;
}
int QuickMod(int  a,int b,int n)
{int r = 1;while(b){if(b&1)r = (r*a)%n;a = (a*a)%n;b >>= 1;}return r;
}void getPrime()
{memset(prime, 0, sizeof(prime));prime[0] = 1;prime[1] = 1;for(int i = 2; i < N; ++i){if(prime[i] == 0){for(int j = i+i; j < N; j+=i)prime[j] = 1;}}
}void bash(int n, int m)
{if(n%(m+1) != 0)printf("1\n");elseprintf("0\n");
}void wzf(int n, int m)
{if(n > m)swap(n, m);int k = m-n;int a = (k * (1.0 + sqrt(5.0))/2.0);if(a == n)printf("0\n");elseprintf("1\n");
}int numsg[N];
void SG(int n)
{int sum = 0;for(int i=0; i < n; i++){scanf("%d",&numsg[i]);sum ^= numsg[i];}if(sum == 0)printf("No\n");else{printf("Yes\n");for(int i = 0; i < n; i++){int s = sum ^ numsg[i];if(s < numsg[i])printf("%d %d\n", numsg[i], s);//从有num[i]个石子的堆后剩余s个石子}}
}


 

H. Alien Abduction

 

这道题目我交了,题目就是长了一点,不过读懂了是蛮简单的,就是给出N个人的初始坐标,在给出Q个飞船的捕捉时

的情况,按照飞船的捕捉能力,统计在能力范围内的人,并通过给出的公式计算人被放回时候的坐标。经过Q个飞船

的操作,问你最后这N个人分别处于那些位置。就是按照题目给出的公式计算。不过judge error了,不知道为什么,

看了以前提交的也是judge error。这道题目的时限是10秒。可以写...

 

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define ll long long
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;int gcd(int  n,int  m)
{if(n<m) swap(n,m);return n%m==0?m:gcd(m,n%m);
}
int lcm(int n,int m)
{if(n<m) swap(n,m);return n/gcd(n,m)*m;
}
#define maxn 10000007
int prime[maxn];
void getPrime();
void bash();
void wzf();
void SG();
int QuickMod(int a, int b, int n);struct node
{ll x, y;
} ren[50005];
struct chuan
{ll X, Y;ll E, a, b, c, d, e, f;
} num[50005];
int t;
int N, Q, W, H;int main()
{scanf("%d", &t);int cnt = 0;while(t--){cnt++;scanf("%d%d%d%d", &N, &Q, &W, &H);for(int i = 1; i <= N; ++i)scanf("%lld%lld", &ren[i].x, &ren[i].y);for(int i = 1; i <= Q; ++i)scanf("%lld%lld%lld%lld%lld%lld%lld%lld%lld", &num[i].X, &num[i].Y, &num[i].E, &num[i].a, &num[i].b, &num[i].c,&num[i].d, &num[i].e, &num[i].f);for(int i = 1; i <= Q; ++i){for(int j = 1; j <= N; ++j){ll tmp = (abs(num[i].X - ren[j].x) + abs(num[i].Y - ren[j].y));if(tmp <= num[i].E){//cout << "****: " << ren[j].x << ' ' << ren[j].y << endl;ll xx = ((ren[j].x*num[i].a) + (ren[j].y*num[i].b) + (j*num[i].c))%W;ll yy = ((ren[j].x*num[i].d) + (ren[j].y*num[i].e) + (j*num[i].f))%H;ren[j].x = xx;ren[j].y = yy;}}}printf("Case #%d:\n", cnt);for(int i = 1; i <= N; ++i){printf("%lld %lld\n", ren[i].x, ren[i].y);}}return 0;
}
int QuickMod(int  a,int b,int n)
{int r = 1;while(b){if(b&1)r = (r*a)%n;a = (a*a)%n;b >>= 1;}return r;
}void getPrime()
{memset(prime, 0, sizeof(prime));prime[0] = 1;prime[1] = 1;for(int i = 2; i < N; ++i){if(prime[i] == 0){for(int j = i+i; j < N; j+=i)prime[j] = 1;}}
}void bash(int n, int m)
{if(n%(m+1) != 0)printf("1\n");elseprintf("0\n");
}void wzf(int n, int m)
{if(n > m)swap(n, m);int k = m-n;int a = (k * (1.0 + sqrt(5.0))/2.0);if(a == n)printf("0\n");elseprintf("1\n");
}int numsg[maxn];
void SG(int n)
{int sum = 0;for(int i=0; i < n; i++){scanf("%d",&numsg[i]);sum ^= numsg[i];}if(sum == 0)printf("No\n");else{printf("Yes\n");for(int i = 0; i < n; i++){int s = sum ^ numsg[i];if(s < numsg[i])printf("%d %d\n", numsg[i], s);//从有num[i]个石子的堆后剩余s个石子}}
}

 

 

J. Perfect Matching

 

给你N个字符串,然后两两组合,问你可以组成多少个回文串。1000个字符串,会超吧,有TLE的,所以我写的时候,我就直接加了一个判断,就是拿到两个字符串之后,先判断一下第一个字符串的首字母和第二个字符串的最后一个字符串是否相同,是的话在进行回文串判断,743ms,好像是用时最少的一个,可能样例里面这样的情况比较多吧,

全被直接卡掉了:

 

#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <functional>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cassert>
#include <bitset>
#include <stack>
#include <ctime>
#include <list>
#define INF 0x7fffffff
#define max3(a,b,c) (max(a,b)>c?max(a,b):c)
#define min3(a,b,c) (min(a,b)<c?min(a,b):c)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int gcd(int  n,int  m)
{if(n<m) swap(n,m);return n%m==0?m:gcd(m,n%m);
}
int lcm(int n,int m)
{if(n<m) swap(n,m);return n/gcd(n,m)*m;
}
#define N 10000007
int prime[N];
struct node
{int x, y;
};
bool cmp(const node & a, const node & b)
{return a.x > b.x;
}
void getPrime();
void bash();
void wzf();
void SG();
int QuickMod(int a, int b, int n);int t;
string str[1001];
int n;
int main()
{scanf("%d", &t);int cnt = 0;while(t--){cnt ++;scanf("%d", &n);for(int i = 0; i < n; ++i)cin >> str[i];int ans = 0;for(int i = 0; i < n; ++i){for(int j = 0; j < n; ++j){int lenb = str[j].length();if(i!=j && str[i][0] == str[j][lenb-1]){string now = str[i]+str[j];int len = now.length();int k, kk, flag = 0;for(k = 0, kk = len-1; k < kk; ++k, --kk){if(now[k] != now[kk]){flag = 1;break;}}if(flag == 0){ans++;}}}}printf("Case #%d: %d\n", cnt, ans);}return 0;
}
int QuickMod(int  a,int b,int n)
{int r = 1;while(b){if(b&1)r = (r*a)%n;a = (a*a)%n;b >>= 1;}return r;
}void getPrime()
{memset(prime, 0, sizeof(prime));prime[0] = 1;prime[1] = 1;for(int i = 2; i < N; ++i){if(prime[i] == 0){for(int j = i+i; j < N; j+=i)prime[j] = 1;}}
}void bash(int n, int m)
{if(n%(m+1) != 0)printf("1\n");elseprintf("0\n");
}void wzf(int n, int m)
{if(n > m)swap(n, m);int k = m-n;int a = (k * (1.0 + sqrt(5.0))/2.0);if(a == n)printf("0\n");elseprintf("1\n");
}int numsg[N];
void SG(int n)
{int sum = 0;for(int i=0; i < n; i++){scanf("%d",&numsg[i]);sum ^= numsg[i];}if(sum == 0)printf("No\n");else{printf("Yes\n");for(int i = 0; i < n; i++){int s = sum ^ numsg[i];if(s < numsg[i])printf("%d %d\n", numsg[i], s);//从有num[i]个石子的堆后剩余s个石子}}
}


 

 

 

这篇关于20130830组队赛-Regionals 2012, Asia - Jakarta的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959976

相关文章

Regionals 2004 Asia - Beijing Argus 小根堆

点击打开链接 小根堆 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokeni

VS2010与2012项目类型选择,MFC

今天装了了一个 VS2012,  在用向导创建工程的时候,发现在项目类型选择的时候,我们要去观察室继承的谁,VS2010项目类型选择,MFC,mainfrm 继承是cframewnd,而VS2012,继承是CframewndEX    区别好大

2014 Asia AnShan Regional Contest 题解

B:5071Chat 暴力模拟即可。注意Bye的时候先和always on top说bye。还有注意long long。 代码如下: #include <set>#include <cstdio>#include <cstring>#include <algorithm>using namespace std ;#pragma comment(linker, "/ST

VOC 2012 augment 数据集 data augmentation 10582到底哪来的

根据deeplabv3+官方,train_aug 数据应该有10582.   你只需要准备两个文件夹,一个list.txt,三个数据: 官方提供的VOC2012的JEPGImages 文件夹(也就是全部的彩色照片)SBD数据库的数据扩增标注该标注对应的list(复制粘贴) 也就是说,SBD使用的是原始图片,没有平移旋转,所以你不需要下载他们提供的那个1G多压缩包,只需要下个40M标注。

MySQL 报 Unknown or incorrect time zone: 'Asia/Shanghai' 错

一般是因为mysql中缺少了关于timezone的表 可以到http://dev.mysql.com/downloads/timezones.html下载对应版本的sql语句 一般是下载posix标准的那张表 解压之后, 再终端 登陆mysql 查看mysql的版本在终端直接 输入 mysql -V //未登录进mysql的时候 mysql -u root -p密码use mys

2012年4月11日GMAT数学考试机经回忆(十二)

二零一(残狗 一个公司一共有W个人,然后平均分到三个team里面去,多出一个人来。。。问下面哪个选项可能是三个组的人数,每个选项3个表达式,都是分母为3,分子是什么w-1,w+1或者w+2之类的(大家能懂吧。。。 (提供者ID:大黄蜂2012 思路:“每个选项3个表达式”,是所有可能性么?求补充,求讨论; 分成三组后多出一人,即w/3余数为1,则(w-1可以被3整除,同理w+2,w-4等都

2012年12月21日SAT数学每日一题

下面是一道SAT数学 练习题,请自行完成后参看答案和解析。   Read the following SAT test question, then click on a button to select your answer.   There are n students in a biology class, and only 6 of them are seniors. If 7

2012-2022年各省新质生产力匹配数字经济数据

2012-2022年各省新质生产力匹配数字经济数据 1、时间:2012-2022年 2、来源:各省年鉴、能源年鉴、工业年鉴、统计年鉴 3、指标:prov、year、gdp亿元、在岗职工工资元、第三产业就业比重、人均受教育平均年限、教育经费强度、在校学生结构、规上工业企业RD全时当量h、每百人创新企业数、电子商务交易活动企业数企业总数、机器人安装密度、森林覆盖率、环境保护支出一般财政支出、化学

猜叔叔的出生年月日 今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。

package org.bluebridge.topics;/** 猜叔叔的出生年月日今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”“把我出生的年月日连起来拼成一个8位数(月、日不足两位前补0)正好可以被今天的年、月、日整除!”他想了想,又补充到:“再给个提示,我是6月出生的。”根据这

Windows server 2012域环境的搭建(图文详解版)

目录 前提 1.1 设置服务器 1.2 更改计算机名  1.3 安装域控制器和 DNS 服务  1.4 升级服务器 1.5 域内主机搭建 1.6 加入域  前提         需要准备一个Windows server 2012(当做域控主机)和一个win7的镜像主机(域内主机)         为了方便配置,需要将域控主机和被控主机设置为NAT模式,方便后续的配置,最