2017 ACM/ICPC Asia Regional Qingdao Online
来源:互联网 发布:矩阵乘法规则 编辑:程序博客网 时间:2024/05/17 23:06
题目链接
01:http://acm.hdu.edu.cn/showproblem.php?pid=6206
02:http://acm.hdu.edu.cn/showproblem.php?pid=6207
03:http://acm.hdu.edu.cn/showproblem.php?pid=6208
04:http://acm.hdu.edu.cn/showproblem.php?pid=6209
05:http://acm.hdu.edu.cn/showproblem.php?pid=6210
06:http://acm.hdu.edu.cn/showproblem.php?pid=6211
07:http://acm.hdu.edu.cn/showproblem.php?pid=6212
08:http://acm.hdu.edu.cn/showproblem.php?pid=6213
09:http://acm.hdu.edu.cn/showproblem.php?pid=6214
10:http://acm.hdu.edu.cn/showproblem.php?pid=6215
11:http://acm.hdu.edu.cn/showproblem.php?pid=6216
这场比赛交流不想之前那么充足可能是疲劳比赛吧,做出5题后面做10失败很可惜。
一些题解
01 Apple
这道题就是给定三个点,要你看第四个点是否在三个点组成圆内。
这道题就是基本求圆的数学题就是卡精度,然后大家纷纷使用java,,,,
import java.io.BufferedInputStream;import java.io.IOException;import java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;import java.util.Vector;public class Main{ private static Scanner cin; public static void main(String[] args) throws IOException { cin = new Scanner(new BufferedInputStream(System.in)); int T = cin.nextInt(); for (int cnt = 1; cnt <= T; cnt++) { BigDecimal two = new BigDecimal("2.0000"), x1=cin.nextBigDecimal(), y1=cin.nextBigDecimal(), x2=cin.nextBigDecimal(),y2=cin.nextBigDecimal(), x3=cin.nextBigDecimal(),y3=cin.nextBigDecimal(), x=cin.nextBigDecimal(), y=cin.nextBigDecimal(),x0,y0; BigDecimal tmp1,tmp2,tmp3; tmp1 = (x1.multiply(x1).subtract(x2.multiply(x2)).add(y1.multiply(y1)).subtract(y2.multiply(y2))).multiply(y1.subtract(y3)); tmp2 = ((x1.multiply(x1).subtract(x3.multiply(x3)).add(y1.multiply(y1)).subtract(y3.multiply(y3))).multiply(y1.subtract(y2))); x0 = tmp1.subtract(tmp2); tmp3 = (y1.subtract(y3)).multiply(x1.subtract(x2)).multiply(two). subtract((y1.subtract(y2)).multiply(x1.subtract(x3)).multiply(two)); x0=x0.divide(tmp3,10, BigDecimal.ROUND_HALF_EVEN); tmp1 = (x1.multiply(x1).subtract(x2.multiply(x2)).add(y1.multiply(y1)).subtract(y2.multiply(y2))).multiply(x1.subtract(x3)); tmp2 = ((x1.multiply(x1).subtract(x3.multiply(x3)).add(y1.multiply(y1)).subtract(y3.multiply(y3))).multiply(x1.subtract(x2))); y0 = tmp1.subtract(tmp2); tmp3 = (y1.subtract(y2)).multiply(x1.subtract(x3)).multiply(two). subtract((y1.subtract(y3)).multiply(x1.subtract(x2)).multiply(two)); y0=y0.divide(tmp3,10, BigDecimal.ROUND_HALF_EVEN); BigDecimal dis1,dis2; dis1=(x0.subtract(x1)).multiply(x0.subtract(x1)).add(y0.subtract(y1).multiply(y0.subtract(y1))); dis2=((x0.subtract(x)).multiply(x0.subtract(x)).add(y0.subtract(y).multiply(y0.subtract(y)))); //System.out.println(dis1);System.out.println(dis2); if(dis1.compareTo(dis2)<0) System.out.println("Accepted"); else System.out.println("Rejected"); } }}
03 The Dominator of Strings
这道题的意思就是给你一堆字符串让你求其中是否有一个串使其他所有串都是他的子串。
那么父串一定是最长的那一个其他所有串都是其子串才有可能,如果一样长就判断相等就行,那么.find()一下就好了。
#include <bits/stdc++.h>using namespace std;string ss[100005];int main(){ int t; scanf("%d", &t); while(t--) { int n; scanf("%d", &n); getchar(); int bj = 1; int maxx = 0; string::size_type idx; for(int i = 1;i <= n;i++) { char ls; ss[i] = ""; while(ls = getchar(), ls != '\n') { ss[i] += ls; } int len = ss[i].size(); if(len > maxx) { bj = i; maxx = len; } } int flag = 1; for(int i = 1;i <= n;i++) { if(bj == i) continue; else if(ss[i].size() == maxx) { if(ss[i] != ss[bj]) { flag = 0; break; } } else if(ss[i].size() < maxx) { idx = ss[bj].find(ss[i]); if(idx == string::npos) { flag = 0; break; } } } if(flag == 0) printf("No\n"); else cout<<ss[bj]<<endl; } return 0;}
08 Chinese Zodiac
题目给定两个人的生肖,并且一个人要比另一个人年轻,问他们差几岁,那么直接用map预处理一下各个生肖的岁数,如果男的生肖比女的小直接相减即可,如果一样就差12岁,如果男的比女的大了,说明女的大了一轮,直接12减去生肖差即可。
#include<bits/stdc++.h>using namespace std;const int maxn=1000010;const int inf=0x3f3f3f3f;map<string,int> mp;int main(){ int t; scanf("%d",&t); mp["rat"]=1,mp["ox"]=2,mp["tiger"]=3,mp["rabbit"]=4,mp["dragon"]=5,mp["snake"]=6,mp["horse"]=7,mp["sheep"]=8,mp["monkey"]=9,mp["rooster"]=10,mp["dog"]=11,mp["pig"]=12; while(t--) { string a,b; int x,y; cin>>a>>b; x=mp[a],y=mp[b]; int ans=0; if(x==y) ans=12; else if(x<y) ans=abs(x-y); else if(x>y) ans=12-abs(x-y); printf("%d\n",ans); } return 0;}
09 Smallest Minimum Cut
最小割的最小边模板题。
#include <bits/stdc++.h>using namespace std;typedef long long int LL;const int MAXN = 1010;const int INF = 1<<30;struct Edge{ int to, cap;};int n,m,s,t, np,nc;vector<Edge> edge;vector<int> G[MAXN];int d[MAXN], cur[MAXN];void init(){ memset(d,0,sizeof(d)); memset(cur,0,sizeof(cur)); memset(G,0,sizeof(G));}void AddEdge(int from, int to, int cap){ edge.push_back((Edge){to, cap}); edge.push_back((Edge){from, 0}); int id = edge.size(); G[from].push_back(id-2); G[to].push_back(id-1);}bool bfs(){ memset(d, 0, sizeof(d)); queue<int> Q; Q.push(s); d[s] = 1; while(!Q.empty()) { int x = Q.front(); Q.pop(); if(x == t) return true; for(int i=0; i<G[x].size(); i++) { Edge& e = edge[G[x][i]]; if(!d[e.to] && e.cap>0) { d[e.to] = d[x]+1; Q.push(e.to); } } } return false;}int dfs(int x, int a){ if(x == t || a == 0) return a; int flow = 0, f; for(int& i=cur[x]; i<G[x].size(); i++) { Edge& e = edge[G[x][i]]; if(d[x]+1 == d[e.to] && (f=dfs(e.to, min(a, e.cap)))>0) { e.cap -= f; edge[G[x][i]^1].cap += f; flow += f; a -= f; if(a == 0) break; } } return flow;}int Maxflow(){ int flow = 0; while(bfs()) { memset(cur, 0, sizeof(cur)); flow += dfs(s, INF); } return flow;}int main(){ int qs; scanf("%d",&qs); while(qs--) { init(); scanf("%d%d",&n,&m); scanf("%d%d",&s,&t); int x,y,z; for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); AddEdge(x,y,z*(m+1)+1); } printf("%d\n",Maxflow()%(m+1)); }}
11 A Cubic number and A Cubic Number
题目是说给定一个素数问它是不是由两个数的三次方的差,那么其实一定是相邻两个的差才会出现素数因为(a + n)^3 - a^3 = 3 * n^2 * a + 3 * a^2 * n + n ^3一定有个因素n而只有n = 1才有可能。
那知道上面这个公式,再去求就简单了。
#include <bits/stdc++.h>using namespace std;typedef long long LL;map<LL,int>M;int main(){ int t; scanf("%d", &t); while(t--) { int flag = 0; LL p; scanf("%I64d", &p); LL ans = (p - 1); if(ans % 3 != 0) flag = 0; else { ans /= 3; LL s = sqrt(ans); if(s *(s + 1) == ans) flag = 1; } if(flag == 1) printf("YES\n"); else printf("NO\n"); } return 0;}
补题
10 Brute Force Sorting
题目是说,给定一串数字要你每次删去所有递减的子串,问你最后剩下的数字串是什么。
暴力是直接gg的那么看了网上题解说是要用双向链表扫,每次直接删去节点然后保存删之前的节点。
#include <bits\stdc++.h>using namespace std;const int maxn = 100004;int a[maxn], leff[maxn], rigg[maxn];int que[maxn], top;int main(){ int t; scanf("%d", &t); while(t--) { memset(a, 0, sizeof(a)); int n; scanf("%d", &n); top = 0; int ans = n; rigg[0] = 1; leff[n + 1] = n; for(int i = 1;i <= n;i++) { scanf("%d", &a[i]); rigg[i] = i + 1; leff[i] = i - 1; que[top++] = i; } int flag = 1; while(flag) { flag = 0; int now = 0; int s = 0; while(now < top) { int i = que[now], ss = 0; while(rigg[i] <= n) { if(a[i] > a[rigg[i]])ss++, i = rigg[i], flag = 1; else break; } if(ss)ans -= (ss + 1); if(ss) { rigg[leff[que[now]]] = rigg[i]; leff[rigg[i]] = leff[que[now]]; que[s++] = leff[que[now]]; } while(que[now] <= i&&now < top)now++; } top = s; } printf("%d\n", ans); int now = 0; while(now <= n) { if(now != 0) printf("%d ", a[now]); now = rigg[now]; } printf("\n"); } return 0;}
- 2017 ACM/ICPC Asia Regional Qingdao Online
- 2017 ACM/ICPC Asia Regional Qingdao Online
- 2017 ACM/ICPC Asia Regional Qingdao Online
- 2017 ACM/ICPC Asia Regional Qingdao Online
- 【2016 ACM/ICPC Asia Regional Qingdao Online】
- 2016 ACM/ICPC Asia Regional Qingdao Online
- 2016 ACM/ICPC Asia Regional Qingdao Online
- 2017 ACM/ICPC Asia Regional Qingdao Online--Chinese Zodiac
- 2017 ACM/ICPC Asia Regional Qingdao Online:1001 Apple
- 2017 ACM/ICPC Asia Regional Qingdao Online:1008 Chinese Zodiac
- HDu 6216 && 2017 ACM/ICPC Asia Regional Qingdao Online 1011
- 2017 ACM/ICPC Asia Regional Qingdao Online【solved:7 / 11】
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-1001-Apple
- 2017 ACM/ICPC Asia Regional Qingdao Online Brute Force Sorting
- 2017 ACM/ICPC Asia Regional Qingdao Online 1011(数学知识)
- HDU-2017 ACM/ICPC Asia Regional Qingdao Online-补题
- 2016 ACM/ICPC Asia Regional Qingdao Online 1002Cure
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001
- 靠脸吃饭变热点_你看好人脸识别技术吗?
- Linux文件打包与压缩
- 七个结构型模式2:桥接模式-Bridge Pattern【学习难度:★★★☆☆,使用频率:★★★☆☆】
- java.lang.InstantiationException 实例化异常
- Mac OS X内核编程,MAC驱动开发资源汇总
- 2017 ACM/ICPC Asia Regional Qingdao Online
- 单例模式讨论篇:单例模式与垃圾回收
- Java中的GC(垃圾回收)
- JsonObject、java、JsonArray之间的转换
- java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
- 彻底理解ThreadLocal
- jQuery知识点大全
- Java面向对象特性--多态
- OCR识别-python版(一)