20130825组队赛-2012 East Central Regional Contest
来源:互联网 发布:非农数据与黄金走势 编辑:程序博客网 时间:2024/05/21 09:11
暴力的专场:
A. Babs' Box Boutique
对于每一个立方体暴力枚举其拥有的三个面,只有十个立方体,暴力可以过的:
#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;struct node{ int l,w;} SA[50],SB[50];int bian[15][4];int n;int s[15];int dix[3]= {0,0,1};int diy[3]= {1,2,2};int ans;bool cmp(node a,node b){ if(a.l == b.l) return a.w < b.w; else return a.l < b.l;}void DFS(int u){ if(u == n) { for(int i = 0; i < n; i++) SB[i] =SA[i]; sort(SB, SB+n, cmp); memset(s, 0, sizeof(s)); for(int i = 0; i < n; i++) { s[i] = 1; for(int j = i-1; j >= 0; --j) { if(SB[i].w >= SB[j].w && s[i] < s[j]+1) { s[i] = s[j]+1; if(ans < s[i]) ans = s[i]; } } } return; } for(int i = 0; i <3; ++i) { SA[u].l = bian[u][dix[i]]; SA[u].w = bian[u][diy[i]]; if(SA[u].l >SA[u].w) swap(SA[u].l, SA[u].w); DFS(u + 1); }}int main(){ int cnt = 0; while(scanf("%d", &n)) { if(!n) break; cnt ++; for(int i = 0; i < n; ++i) scanf("%d%d%d", &bian[i][0], &bian[i][1], &bian[i][2]); ans = 0; DFS(0); printf("Case %d: %d\n", cnt, ans); } return 0;}
B. Flash Mob
这道题目搞了好久,我们一开始一直在匹配x和y值,一直WA,后来用三分过的。第二天写了一下,发现直接找
到中间点也是可以的,对于曼哈顿距离(求解x和xi的距离之差的和,以及y与yi的距离之差的和),枚举x和Y的情
况,我们一直WA的错误是没有进行距离初始化,把距离初始化为所有的点到第一点的距离之后,再次暴力枚举x和y,
A了。水了:
#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 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;#define N 1050#define INF 99999999int numx[N];int numy[N];int MINX;int MINY;int MIN;int n;int main(){ int cnt = 0; while(scanf("%d", &n)) { if(!n) break; memset(numx, 0, sizeof(numx)); memset(numy, 0, sizeof(numy)); cnt ++; for(int i = 1; i <= n; ++i) { scanf("%d", &numx[i]); scanf("%d", &numy[i]); } int sumx = 0; int sumy = 0; int sum; sort(numx+1, numx + n+1); sort(numy+1, numy + n+1); for(int i = 1; i <= n; ++i) { sumx += abs(numx[i] - numx[1]); sumy += abs(numy[i] - numy[1]); } MINX = numx[1]; MINY = numy[1]; for(int i = 2; i <= n; ++i) { sum = 0; for(int j = 1; j <= n; ++j) sum += abs(numx[i] - numx[j]); if(sum < sumx) { sumx = sum; MINX = numx[i]; } } for(int i = 2; i <= n; ++i) { sum = 0; for(int j = 1; j <= n; ++j) { sum += abs(numy[i] - numy[j]); } if(sum < sumy) { sumy = sum; MINY = numy[i]; } } printf("Case %d: (%d,%d) %d\n", cnt, MINX, MINY, sumx + sumy); } return 0;}
直接求中点:
#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 2000int prime[N];struct node{ int data[6];} num[N];void getPrime();void bash();void wzf();void SG();int QuickMod(int a, int b, int n);int numx[N];int numy[N];int MIN;int n;int solve(int x, int y){ int ans = 0; for(int i = 1; i <= n; ++i) { ans += abs(numx[i]-x); ans += abs(numy[i]-y); } return ans;}int main(){ int cnt = 0; while(scanf("%d", &n)) { if(!n) break; cnt++; for(int i = 1; i <= n; ++i) scanf("%d%d", &numx[i], &numy[i]); sort(numx+1, numx+n+1); sort(numy+1, numy+n+1); int MINX = numx[(n+1)/2]; int MINY = numy[(n+1)/2]; MIN = solve(MINX, MINY); printf("Case %d: (%d,%d) %d\n", cnt, MINX, MINY, MIN); } 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"); else printf("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"); else printf("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个石子 } }}
D. I've Got Your Back(gammon)
这道题目本来就是想直接很暴力很暴力写的,一直顾及会超时,又因为一开始写的时候写的不顺利 ,比赛的时候就
木有弄出来。第二天,重新写了一下暴力的写法,A了,晕了;就是对于能够组成15的六个数字进行暴力枚举,因
为总的数量只有15503,每次查找的时候也是很快的,所以就直接暴力了(还是要试试):
#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 20000int prime[N];struct node{ int data[6];} num[N];void getPrime();void bash();void wzf();void SG();int QuickMod(int a, int b, int n);char order[10];void init(){ int index = 0; for(int i1 = 0; i1 <= 15; ++i1) { for(int i2 = 0; i2 <= 15; ++i2) { for(int i3 = 0; i3 <= 15; ++i3) { for(int i4 = 0; i4 <= 15; ++i4) { for(int i5 = 0; i5 <= 15; ++i5) { for(int i6 = 0; i6 <= 15; ++i6) { if(i1+i2+i3+i4+i5+i6 == 15) { num[index].data[0] = i1; num[index].data[1] = i2; num[index].data[2] = i3; num[index].data[3] = i4; num[index].data[4] = i5; num[index].data[5] = i6; index++; } } } } } } }}int main(){ init(); int cnt = 0; while(scanf("%s", order)) { int i1, i2, i3, i4, i5, i6; int ii; if(order[0] == 'e') break; cnt++; if(order[0] == 'm') { scanf("%d%d%d%d%d%d", &i1,&i2,&i3,&i4,&i5,&i6); for(int index = 0; index <= 15504; ++index) { if(num[index].data[0] == i1&&num[index].data[1] == i2&&num[index].data[2] == i3&& num[index].data[3] == i4&&num[index].data[4] == i5&&num[index].data[5] == i6) { printf("Case %d: %d\n", cnt, index); break; } } } else if(order[0] == 'u') { printf("Case %d: ", cnt); scanf("%d", &ii); for(int i = 0; i < 5; ++i) { printf("%d ", num[ii].data[i]); } printf("%d\n", num[ii].data[5]); } } 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"); else printf("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"); else printf("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个石子 } }}
- 20130825组队赛-2012 East Central Regional Contest
- 2012 East Central Regional Contest 解题报告
- 130825组队赛-Regionals 2012, North America - East Central NA
- 2012-2013 ACM-ICPC East Central North America Regional Contest (ECNA 2012)
- 组队练习赛(Regionals 2012, North America - East Central NA)
- 20131004组队赛-Regionals 2010, North America - East Central NA
- 组队赛131004 Regionals 2010, North America - East Central NA
- 计算几何 _ 2010 East Central Regional Contest _ problem D
- 2014-2015 ACM-ICPC East Central North America Regional Contest (ECNA 2014)
- 2005-2006 ACM-ICPC East Central North America Regional Contest (ECNA 2005) H.Two Ends
- 2005-2006 ACM-ICPC East Central North America Regional Contest (ECNA 2005) G.Swamp Things
- 2005-2006 ACM-ICPC East Central North America Regional Contest (ECNA 2005) F.Square Count
- Central Europe Regional Contest 2012 Problem C: Chemist’s vows
- Central Europe Regional Contest 2012 Problem H: Darts
- Central Europe Regional Contest 2014 [Gym
- Central Europe Regional Contest 2014 B [Gym
- North America - East Central NA 2012
- 组队周赛_The 2007 ACM-ICPC ECNA Regional Programming Contest
- java中filter与interceptor的区别
- 认识状态模式
- Service组件 总结 + 绑定理Service三种实现方式 Messager + Binder + AIDL
- Vim用正则表达式进行批量修改
- 疑难问题记载
- 20130825组队赛-2012 East Central Regional Contest
- 汉克时代面试总结
- asp.net操作word的表格
- spring mvc 异常统一处理
- sql分页(1)利用Not In和SELECT TOP分页
- Windows上编译libtiff
- C++ 中 extern const 的用法
- 【线段树】hdu 1394 Minimum Inversion Number
- synchronized(class)、synchronized(this)与synchronized(object)