2016 ACM-ICPC EC-Final
UVALive7897 Number Theory Problem (找规律签到)
思路:
8的幂次都是可以的,因为an-1一定能分解成a-1乘上一个多项式。
看不出来也没关系,打表就发现每三个数有一个7的倍数。
代码:
#include <cstdio> using namespace std; int main()
{
int T, kase = ;
scanf("%d", &T);
while (T--) {
int N;
scanf("%d", &N);
printf("Case #%d: %d\n", kase++, N/);
} return ;
}
UVALive7899 Mr. Panda and Strips (暴搜+尺取+剪枝)
思路:
我也不知道这是什么做法,神棍剪枝吧-。=
尺取大法好(超大声)
#include <bits/stdc++.h> using namespace std;
const int MAX_N = 1e3 + ;
const int MAX_C = 1e5 + ; int N;
int C[MAX_N], len[MAX_N];
int ans;
bool vis[MAX_C]; inline void reset() {
for (int i = ; i <= N; i++) vis[C[i]] = false;
} void init()
{
cin >> N;
for (int i = ; i <= N; i++)
scanf("%d", C+i);
C[N+] = ;
reset();
} inline int jump(int pos, int limit) {
int l = pos, r = pos, res = -;
while (r <= N) {
while (!vis[C[r]] && r <= N) vis[C[r++]] = true;
if (len[l] < limit) break;
res = max(res, r-l);
while ( vis[C[r]] && l <= r) vis[C[l++]] = false;
}
for (int i = l; i < r; i++) vis[C[i]] = false;
return res;
} int main()
{
int T, kase = ;
cin >> T;
while (T--) {
init();
for (int i = ; i <= N; i++, reset()) {
len[i] = ;
for (int j = i; j <= N && !vis[C[j]]; j++)
len[i]++, vis[C[j]] = true;
}
len[N+] = ;
for (int i = N; i >= ; i--)
len[i] = max(len[i], len[i+]);
ans = len[]; for (int i = ; i <= N; i++, reset())
for (int j = i; j <= N && !vis[C[j]]; j++) {
vis[C[j]] = true;
if (ans >= j-i+ + len[j]) continue;
int res = jump(j+, ans-(j-i+));
ans = max(ans, j-i+ + res);
}
reset();
printf("Case #%d: %d\n", kase++, ans);
}
return ;
}
/*
3
8
3 1 2 1 6 1 2 5
3
1 2 3
3
1 1 1
*/
UVALive7900 Ice Cream Tower (二分+贪心)
假思路:
贪心地取冰淇淋球,尽可能地早点做出Tower,不能放在之前的冰淇淋上的球当作新的底座。
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int MAX_N = 3e5 + ; struct QNode{
ll val;
int len;
QNode(ll v = , int l = ) : val(v), len(l) {}
}; ll B[MAX_N];
queue <QNode> Q; int main()
{
int T, kase = ;
cin >> T;
while (T--) {
int N, K, ans = ;
cin >> N >> K;
for (int i = ; i <= N; i++)
scanf("%lld", B+i);
sort(B+, B++N);
for (int i = N; i >= ; i--) {
if (Q.empty()) {
Q.push(QNode(B[i], ));
continue;
}
QNode cur = Q.front();
if (cur.val/ >= B[i]) {
Q.pop();
if (cur.len+ == K)
ans++;
else
Q.push(QNode(B[i], cur.len+));
}
else {
Q.push(QNode(B[i], ));
}
}
while (!Q.empty())
Q.pop();
printf("Case #%d: %d\n", kase++, ans);
}
return ;
}
/*
3
4 2
1 2 3 4
6 3
1 1 2 2 4 4
6 3
1 1 2 2 3 4
*/
自我hack【精通】。。codeforces gym上的数据比较强,上面的代码就不能过了。
思路:
二分答案,用上面的贪心法验证。。。。O(Nlog(N/K))
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int MAX_N = 3e5 + ;
struct Node{
ll val, len;
Node(ll v = , ll l = ) : val(v), len(l) {}
}; int N, K;
ll B[MAX_N]; queue <Node> Q;
bool solve(int ans){
while (!Q.empty())
Q.pop();
if (K == )
return true;
for (int i = ; i <= ans; i++)
Q.push(Node(B[i], ));
for (int i = ans+; i <= N; i++) {
if (Q.empty())
break;
Node cur = Q.front();
if (B[i]/ >= cur.val) {
Q.pop();
if (cur.len == K-)
continue;
Q.push(Node(B[i], cur.len+));
}
}
return Q.empty();
} int main()
{
int T;
cin >> T;
for (int kase = ; kase <= T; kase++) {
cin >> N >> K;
for (int i = ; i <= N; i++)
scanf("%lld", B+i);
sort(B+, B++N);
int ansl = , ansr = N, ans = ;
while (ansl <= ansr) {
int mid = (ansl + ansr) >> ;
if (solve(mid)) {
ans = max(ans, mid);
ansl = mid+;
}
else {
ansr = mid-;
}
}
printf("Case #%d: %d\n", kase, ans);
}
return ;
}
/*
3
4 2
1 2 3 4
6 3
1 1 2 2 4 4
6 3
1 1 2 2 3 4
*/
UVALive7901 Bet (数学+贪心+高精度除法(long double))
思路:
小学数学题-。=
贪心地选性价比高的队伍,能选多个队伍的条件是这些队伍的A/(A+B)的和小于1。。。。这个精度啊。。比赛的时候WA来WA去就是没想到,Dilthey瞄了一眼题解发现是高精度除法,long double够用。。。换上long double就AC了。。在现场的话,不知道这个高精度估计要悔恨终身了。
#include <bits/stdc++.h> using namespace std;
const int MAX_N = + ;
const long double money = 1e3 + ;
const long double eps = 1e-; long double A[MAX_N], B[MAX_N], C[MAX_N]; int main()
{
int T;
cin >> T;
for (int kase = ; kase <= T; kase++) {
int N;
cin >> N;
for (int i = ; i <= N; i++) {
char x;
cin >> A[i] >> x >> B[i];
C[i] = (long double)A[i] / (A[i] + B[i]);
}
sort(C+, C++N);
int cnt = ;
long double sum = ;
while (cnt+ <= N && sum + C[cnt+]*money < money-eps) {
sum += C[++cnt]*money;
}
printf("Case #%d: %d\n", kase, cnt);
}
return ;
}
/*
3
2
5:3
2:7
2
1:1
1:1.01
3
1:1.1
1:0.2
1.5:1.7
*/
/*
10
12
1:10
1:10
1:10
1:10
1:10
1:10
1:10
1:10
1:10
1:10
1:10
1:10
12
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
1:9.9
12
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
1:10.1
*/
UVALive7908 Great Cells (数学思维+快速幂)
思路:Dilthey的博客
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const ll MOD = ; ll fpow(ll a, ll p) {
ll ans = ;
while (p) {
if (p&) ans *= a, ans %= MOD;
a *= a, a %= MOD;
p >>= ;
}
return ans;
} int main()
{
int T;
cin >> T;
for (int kase = ; kase <= T; kase++) {
ll N, M, K;
cin >> N >> M >> K;
ll ans = ;
for (ll i = ; i <= K; i++)
ans += fpow(i-, N-+M-), ans %= MOD;
ans *= N*M, ans %= MOD;
ans *= fpow(K, (N-)*(M-)), ans %= MOD;
ans += fpow(K, N*M), ans %= MOD;
printf("Case #%d: ", kase);
cout << ans << endl;
}
return ;
}
/*
3
2 2 2
2 3 2
3 4 5
*/
UVALive7908 World Cup (3进制状压+枚举)
思路:
把所有的可能答案都预处理出来,有36个,直接枚举时间复杂度为O(4*36T)。
预处理的时候把比赛结果的可能性:胜负,平局,负胜压成六位三进制数即可。
#include <bits/stdc++.h> using namespace std;
const int l[] = {, , , , , };
const int r[] = {, , , , , };
const int len = ; int pow(int a, int p)
{
int ans = ;
while (p) {
if (p&) ans *= a;
a *= a;
p >>= ;
}
return ans;
} int A[];
int res[len+][]; void init()
{
memset(res, , sizeof res);
for (int i = ; i < len; i++) {
int tmp = i;// mod 3 = 0胜,1平,2败。
for (int j = ; j < ; j++) {
if (tmp % == ) {
res[i][l[j]] += ;
}
else if (tmp % == ) {
res[i][l[j]]++;
res[i][r[j]]++;
}
else if (tmp % == ) {
res[i][r[j]] += ;
}
tmp /= ;
}
}
} int main()
{
init();
int T;
cin >> T;
for (int kase = ; kase <= T; kase++) {
for (int i = ; i <= ; i++)
scanf("%d", A+i);
int valid = ;
for (int i = ; i < len; i++) {
int j;
for (j = ; j <= ; j++)
if (A[j] != res[i][j])
break;
if (j == ) {
valid++;
}
}
printf("Case #%d: ", kase);
if (!valid)
puts("Wrong Scoreboard");
else {
sort(A, A+);
if (valid > )
puts("No");
else
puts("Yes");
}
}
return ;
}
/*
3
9 6 3 0
6 6 6 0
10 6 3 0
*/
2016 ACM-ICPC EC-Final的更多相关文章
- 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp
QSC and Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1003/HDU 5894 数学/组合数/逆元
hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分
I Count Two Three Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp
odd-even number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 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 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- 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 ...
随机推荐
- dir()函数
- python http 请求 响应 post表单提交
1. 查看请求 响应情况 print(response.text) print(response.headers) print(response.request.body) print(respons ...
- linux nginx 添加到全局变量中(环境变量)
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/ /usr/local/bin/就是环境变量目录
- html <iframe>介绍
iframe 元素会创建包含另外一个文档的内联框架 属性 值 描述 align left.right.top.middle.bottom 不赞成使用.请使用样式代替.规定如何根据周围的元素来对齐此框架 ...
- css3 居中(推荐弹性盒模型方式)
参考 http://www.zhihu.com/question/20774514 http://caibaojian.com/demo/flexbox/align-items.html 例子:ht ...
- Oracle与MySQL的SQL语句区别
2 表 2.1 创建表(同) create table tableName( columnName1 int, columnName2 int ) 2.2 删除表(异) MySQL: drop tab ...
- 一: Docker的概念
附件:https://files.cnblogs.com/files/chaos-li/docker-k8s-devops-master-9287a2ca56433ca076078b564de9488 ...
- 十六. Python基础(16)--内置函数-2
十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...
- 五. Python基础(5)--语法
五. Python基础(5)--语法 1 ● break结束的是它所在的循环体, continue是让它所在的循环体继续循环 # 打印: 1 10 2 10 3 10 4 10 5 10 6 10 7 ...
- SQL-14 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。 注意对于重复的emp_no进行忽略。
题目描述 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t.注意对于重复的emp_no进行忽略.CREATE TABLE IF NOT EXISTS &q ...