2016 ACM/ICPC Asia Regional Dalian Online(更新到五道题)
这道题输入也很阴险!!!
这道题过题姿势最优雅的,不是if else if else if。那样很容易wa的。
如果没有平手选项, 赢得加一分的话, 可以用Landau's Theorem(兰道定理)判定。 稍微修改一下这个定理就能做了。
假设S1,S2……Sn是他们的得分序列,从小到排个序。那么这个序列要是合法。那么当且仅当
- S1+S2+……+Sn = n(n-1)
- S1+S2+……+Si >= i(i-1) ( 1 <= i < n)
其实第二条也可以理解成,第i大的得分,不可能多于2(i-1),因为你最多把剩下的队伍全部赢一边。
#include <cstdio> #include <algorithm> using namespace std; + ; int T, n; int a[maxn]; void solve() { scanf("%d", &n); ; i <= n; i++) { scanf("%d", &a[i]); } sort(a + , a + n + ); ; ; i <= n; i++) { sum = sum + a[i]; )) { printf("F\n"); return ; } } )) printf("F\n"); else printf("T\n"); } int main() { while(~scanf("%d", &T)) { while(T--) { solve(); } } ; }
二分图。每条边理解成一种颜色。则越坏的情况,需要越多的颜色。最坏的情况就是完全二分图。所以就是求完全二分图的边数来作为边界条件。
#include <cstdio> int main() { long long n, m; while(~scanf("%I64d%I64d", &n, &m)) { ) / ; * t; if(ans > m) printf("F\n"); else printf("T\n"); } ; }
1008 Function
这是。。n²的做法吧。。 竟然AC了,说明。。数据可能只有一万???
可能是数据太特殊了吧,st表好像都要跑2000ms。
#include <set> #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; #define mem(x,y) memset(x, y, sizeof(x)) #define lson l,m,rt << 1 #define rson m+1,r,rt << 1 | 1 const int INF = 0x3f3f3f3f; + ; int ans, a[maxn], net[maxn]; int main() { int T, n, m, l, r; scanf("%d", &T); while(T--) { scanf("%d", &n); ; i <= n; i++) { scanf("%d", &a[i]); } mem(net, -); ; i <= n; i++) { ; j <= n; j++) { if(a[j] <= a[i]) { net[i] = j; break; } } } scanf("%d", &m); while(m--) { scanf("%d%d", &l, &r); ans = a[l]; for(int i = net[l]; i <= r; i = net[i]) { ) break; } printf("%d\n", ans); } } ; }
1009 Sparse Graph(补图上求最短路)
标题是稀疏图的意思,它的补图几近为完全图。所以广搜的时候复杂度没有想象的那么高。
这是梦天的做法。。比起刚刚那个好懂多了。。感觉刚刚那个两个set真的还是挺绕的。比较晦涩。
#include <set> #include <list> #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <algorithm> using namespace std; #define mem(x,y) memset(x,y,sizeof(x)) const int INF = 0x3f3f3f3f; + ; int dis[maxe]; int T, n, m, u, v, S; void show() { ; i <= n; i++) { if(i == S) continue; if(dis[i] == INF) printf("-1%c", i == n ? '\n' : ' '); else printf("%d%c", dis[i], i == n ? '\n' : ' '); } } int main() { scanf("%d", &T); while (T--) { mem(dis, -); list<int> notvis; set<pair<int, int> > edge; scanf("%d%d", &n, &m); ; i < m; i++) { scanf("%d%d", &u, &v); edge.insert(make_pair(u, v)); edge.insert(make_pair(v, u)); } scanf("%d", &S); ; i <= n; i++) { if (i != S) notvis.push_back(i); } queue<int> que; que.push(S); dis[S] = ; while (!que.empty()) { int cur = que.front(); que.pop(); for (list<int>::iterator it = notvis.begin(); it != notvis.end();) { if (edge.find(make_pair(cur, *it)) == edge.end()) { que.push(*it); dis[*it] = dis[cur] + ; it = notvis.erase(it); } else { it++; } } } show(); } ;
1010 Weak Pair(树的dfs序+离散化)
其实就是统计一下a[u]<=K/a[v],线段树维护。深搜解决。因为数据太大要离散化。
第一种线段树的做法。
#include <set> #include <queue> #include <cstdio> #include <vector> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; #define mem(x,y) memset(x, y, sizeof(x)) #define lson l,m,rt << 1 #define rson m+1,r,rt << 1 | 1 const int INF = 0x3f3f3f3f; ; ], head[maxe * ]; LL k, ans, num[maxe * ], x[maxe * ], sum[(maxe * ) << ]; struct Edge{int to, next;}edge[maxe]; void add_edge(int from,int to) { edge[tot].to = to; edge[tot].next = head[from]; head[from] = tot++; } ] + sum[rt << | ];} void build(int l,int r,int rt) { ; return ;} ; build(lson); build(rson); pushup(rt); } void update(int p,LL add,int l,int r,int rt) { if(l == r) {sum[rt] += add; return ;} ; if(p <= m) update(p ,add, lson); else update(p, add, rson); pushup(rt); } LL query_sum(int ll,int rr,int l,int r,int rt) { if(ll <= l && rr >= r) return sum[rt]; LL res = ; ; if(ll <= m) res += query_sum(ll, rr, lson); if(rr > m) res += query_sum(ll, rr, rson); return res; } void init() { ans = ; tot = ; mem(head, -); mem(deep, ); } void dfs(int u) { int o = lower_bound(x, x + numm, k / num[u]) - x; ans += query_sum(, o, , numm, ); int kk = lower_bound(x, x + numm, num[u]) - x; update(kk, , , numm, ); for(int i = head[u]; ~i; i = edge[i].next) { dfs(edge[i].to); } update(kk, -, , numm, ); } int main() { scanf("%d", &T); while(T--) { ; scanf("%d%I64d", &n, &k); ; i <= n; i++) { scanf("%I64d", &num[i]); x[cnt++] = num[i]; x[cnt++] = k / num[i]; } sort(x, x + cnt);//***** numm = unique(x, x + cnt) - x;//***** init(); ; i < n - ; i++) { int u, v; scanf("%d%d", &u, &v); add_edge(u, v); deep[v]++; } build(, numm, ); ; i <= n; i++) { ) { dfs(i); break; } } printf("%I64d\n", ans); } ; }
第二种是树状数组的做法:(待补充)
2016 ACM/ICPC Asia Regional Dalian Online(更新到五道题)的更多相关文章
- 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 5874 Friends and Enemies 【构造】 (2016 ACM/ICPC Asia Regional Dalian Online)
Friends and Enemies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)
Sparse Graph Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- hdu 5868 2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)
Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K ...
- 2016 ACM/ICPC Asia Regional Dalian Online HDU 5877 Weak Pair treap + dfs序
Weak Pair Problem Description You are given a rooted tree of N nodes, labeled from 1 to N. To the ...
- 2016 ACM/ICPC Asia Regional Dalian Online
1009 Sparse Graph(hdu5876) 由于每条边的权值都为1,所以最短路bfs就够了,只是要求转置图的最短路,所以得用两个set来维护,一个用来存储上次扩散还没访问的点,一个用来存储这 ...
随机推荐
- Simple Network Management Protocol - SNMP Tutorial
30.9 Simple Network Management Protocol Network management protocols specify communication between t ...
- EntityFramework 数据库的迁移
第一步:在程序包管理器控制台里: Enable-Migrations -ProjectName EF所在的项目名称 第二步:运行后会在字段生成Migrations文件夹,Migrations-> ...
- 【Unity3D】利用Shader以及更改Mesh实现2D游戏的动态阴影效果
最近看到一个非常有趣的益智小游戏,是一个盗贼进入房子偷东西的, 其实这种游戏市面上已经很多了,吸引我的是那个类似手电筒的效果, 主角走到哪里,光就到哪里,被挡住的地方还有阴影.有点类似策略游戏里的战争 ...
- [Python] 学习笔记之MySQL数据库操作
1 Python标准数据库接口DB-API介绍 Python标准数据库接口为 Python DB-API,它为开发人员提供了数据库应用编程接口.Python DB-API支持很多种的数据库,你可以选择 ...
- PHP求余函数fmod()
定义和用法 fmod() 函数返回除法的浮点数余数. 语法 fmod(x,y) 参数 描述 x 必需.一个数. y 必需.一个数. 说明 返回被除数(x)除以除数(y)所得的浮点数余数.余数(r)的定 ...
- 搭建 Windows Server 2003 + IIS6.0 + FastCGI + PHP5.3.29 + MySQL5.5.38 + Memcached1.2.6
一.下载相关软件: 1.VC9运行库 即VISUAL C++ 2008 自PHP5.3.0开始,PHP提供VC2008编译版,需要安装VC++ 2008的运行库. [微软官方下载] http://ww ...
- iOS开发——高级篇——二维码的生产和读取
一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤:导入CoreImage框架通过滤镜CIFilter生成二维码 二维码 ...
- nginx自动检测后台服务器健康状态
转自http://www.iyunv.com/thread-38535-1-1.html 公司业务线上对后端节点的健康检查是通过nginx_upstream_check_module模块做的,这里我将 ...
- GDI+中发生一般性错误的解决办法
这个错误经常发生,代码如下: private static byte[] GetBytes (Image image) { try { if (image == null) return null ...
- 使用SQL语句对数据进行MD5加密
如果数据库表User中有一列为passwd,存放的是md5加密的数据,如何更新新的数据. update user set passwd=md5("123321") where uN ...