CF-558:部分题目总结
题目链接:http://codeforces.com/contest/1163
A .Eating Soup
sol:在n / 2、n - m、m三个数中取最小值,结果受这三个值限制。但是m == 0的情况需要特判
- 思维
#include "bits/stdc++.h"
using namespace std;
int main() {
int n, m;
scanf("%d%d", &n, &m);
if (m == ) {puts(""); return ;}
printf("%d\n", min(n >> , min(n - m, m)));
return ;
}没有考虑n - m导致了一发wa,而且想了一定时间。好像有点生疏了,哎。
B1 .Cat Party (Easy Edition)
sol:在这一题中u[i]的范围只有10,可以用循环来尝试删除,并判断删除后可否满足题目要求,然后记录;
- 暴力
#include "bits/stdc++.h"
using namespace std;
const int MAXN = 1e5 + ;
int cnt[MAXN];
int ans, n, k;
bool check() {
int k = -;
for (int i = ; i <= ; i++) {
if (cnt[i]) {
if (k == -) k = cnt[i];
else if (k != cnt[i]) return false;
}
}
return true;
}
int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", &k);
cnt[k]++;
/*
做B2的时候意识到每次删除的要么是只出现一次的数要么是出现次数最多的数
所以这个循环可以改成找最大值,然后检查一下最大值和1就行了
*/
for (int j = ; j <= ; j++) {
if (cnt[j]) {
cnt[j]--;
if (check()) ans = i;
cnt[j]++;
}
}
}
printf("%d\n", ans);
return ;
}
B2 .Cat Party (Hard Edition)
sol:每次删除的数要么是只出现一次的,或者是出现次数最多的。但是暴力找要超时,所以我就用STL里的multiset来了一波优化后的暴力。把思维题做成了暴力;
- 带优化暴力
#include "bits/stdc++.h"
using namespace std;
const int MAXN = 1e5 + ;
multiset<int> st;
multiset<int>::iterator it;
int cnt[MAXN];
int ans, n, k;
int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", &k);
if (cnt[k]) {
it = st.find(cnt[k]);
st.erase(it);
}
cnt[k]++;
st.insert(cnt[k]);
// 特判只有一种数字
if (st.size() == ) {
ans = i;
continue;
}
if (*st.begin() == ) {
st.erase(st.begin());
if (*st.begin() == *(--st.end())) ans = i;
st.insert();
}
it = --st.end();
k = *it;
st.erase(it);
if (*st.begin() == k - && *(--st.end()) == k - ) ans = i;
st.insert(k);
}
printf("%d\n", ans);
return ;
}思维果然跟不上队友,只能靠STL这种道具。队友想到了正解
sol:这题的正解是数据结构,用两个数组a和b,a[i]表示数字i出现几次,b[i]表示出现i次的数有几个
- 数据结构
#include "bits/stdc++.h"
using namespace std;
const int MAXN = 1e5 + ;
int a[MAXN], b[MAXN];
int n, k, mx, ans;
int main() {
scanf("%d", &n);
for (int i = ; i <= n; i++) {
scanf("%d", &k);
b[a[k]]--;
a[k]++;
b[a[k]]++;
mx = max(mx, a[k]);
if (b[] == i) ans = i;
else if (b[i] == ) ans = i;
else if (b[] == && b[mx] * mx == i - ) ans = i;
else if ((b[mx - ] + ) * (mx - ) == i - ) ans = i;
}
printf("%d\n", ans);
return ;
} - 别人同思路的代码
#include <bits/stdc++.h> using namespace std;
int64_t n,x,ans;
map<int,int>a,b;
int main()
{
cin>>n;
ans=;
for(int i=;i<=n;i++)
{
cin>>x;
a[x]++;b[a[x]]++;
if(a[x]*b[a[x]]==i&&i!=n) ans=i+;
if(a[x]*b[a[x]]==i-) ans=i;
}
cout<<ans;
}看到一份别人的思路差不多的代码,但是他用了map代码很整洁,贴一下。
C .Power Transmission
sol:将所有点两两配对,两个点确定一条直线,求出直线方程一般式的a、b、c。将a和b约分后去重。对于每条边,加一次和自己斜率不同的边的个数就行了。
- 几何
#include "bits/stdc++.h"
using namespace std;
typedef pair<int, int> PII;
typedef long long LL;
const int MAXN = ;
PII p[MAXN];
map<PII, set<LL> > mp;
LL tot, ans;
int main() {
int n;
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d%d", &p[i].first, &p[i].second);
for (int i = ; i <= n; i++) {
for (int j = ; j < i; j++) {
int x1 = p[i].first, y1 = p[i].second;
int x2 = p[j].first, y2 = p[j].second;
int a = y2 - y1, b = x1 - x2, g = __gcd(a, b);
a /= g, b /= g;
LL c = - a * 1LL * x2 - b * 1LL * y2;
if (mp[{a, b}].count(c) == ) {
mp[{a, b}].insert(c);
tot++;
ans += tot - mp[{a, b}].size();
}
}
}
printf("%lld\n", ans);
return ;
}以前学的直线方程什么的都忘的差不多了,看出题人的标程里面求c的过程还以为是hash。花了好久才搞明白,提交了十几发。也算收获不小。
CF-558:部分题目总结的更多相关文章
- CF 558 C. Amr and Chemistry 暴力+二进制
链接:http://codeforces.com/problemset/problem/558/C C. Amr and Chemistry time limit per test 1 second ...
- CF 558 C
Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experime ...
- CF 题目选做
写省选的题目对noip没什么大用 关键是 细节题或者是思考题比较重要 练思维自然是CF比较好了 把我见到的比较好的CF题放上来刷一刷. LINK:Complete the projects 就是说一个 ...
- uva 558 - Wormholes(Bellman Ford判断负环)
题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...
- TopCoder SRM 558 Div 1 - Problem 1000 SurroundingGame
传送门:https://284914869.github.io/AEoj/558.html 题目简述 一个人在一个n * m棋盘上玩游戏,想要占领一个格子有两个方法: 在这个格子放一个棋子. 这个 ...
- CF 219D 树形DP
CF 219D [题目链接]CF 219D [题目类型]树形DP &题意: 给一个n节点的有向无环图,要找一个这样的点:该点到其它n-1要逆转的道路最少,(边<u,v>,如果v要到 ...
- 跟着xiaoxin巨巨做cf
cf 385 C. Bear and Prime Numbers 题目大意:有一个数列{xi},每次给出一个询问[l, r],即问 S(l ,r)是l和r之间的素数,f(p)表示数列{xi}中整除p的 ...
- codeforces 558B. Amr and The Large Array 解题报告
题目链接:http://codeforces.com/problemset/problem/558/B 题目意思:给出一个序列,然后找出出现次数最多,但区间占用长度最短的区间左右值. 由于是边读入边比 ...
- Codeforces Round #379 (Div. 2) 解题报告
题目地址 本次CF是在今天早上深夜进行,上午有课就没有直接参加.今天早上上课坐到后排参加了virtual participation.这次CF前面的题目都非常的水,不到10分钟就轻松过了前两题,比较郁 ...
- Miaomiao's Geometry
HDU 4932 Bestcoder Problem Description There are N point on X-axis . Miaomiao would like to cover t ...
随机推荐
- 定时任务莫名停止,Spring 定时任务存在 Bug?
专注于Java领域优质,技术欢迎关注 作者: 鸭血粉丝 来自:Java极客技术 Hello~各位读者新年好,我是鸭血粉丝(大家可以称呼我为「阿粉」).这里阿粉给大家拜个年,祝大家蒸蒸日上烫烫烫,年年有 ...
- JDK的安装与环境变量配置
1.下载JDK后安装,此处安装的是JDK8 2.安装后的路径如下图所示,JDK与JRE在同一个文件夹中 3.安装完JDK后配置环境变量 计算机→属性→高级系统设置→高级→环境变量 4.系统变量→新建 ...
- ThreeJS 阴影条纹BUG
ThreeJS 开启阴影正确做法: 1. 渲染器启用阴影 renderer.shadowMap.enabled = true;2. 灯光产生阴影 light.castShadow = true;3. ...
- java EE应用概述
1.javaEE应用的分层模型 不管是经典的Java EE架构,还是轻量级的Java EE架构,大致上都可以分为以下几层: Damain Object(领域对象)层:该层是由系列的POJO(普通的,传 ...
- 文件下载post请求,返回文件流转换zip,
最近一个需求是批量下载文件,最后打包成zip包,post请求, 因为是文件流下载,所以在取后台数据的时候,要多传递一个[responseType: ‘blob’]这个参数 download() { t ...
- [原]调试实战——使用windbg调试TerminateThread导致的死锁
原调试debugwindbg死锁deadlock 前言 项目里的一个升级程序偶尔会死锁,查看dump后发现是死在了ShellExecuteExW里.经验少,不知道为什么,于是在高端调试论坛里发帖求助, ...
- ZJNU 1528 - War--高级
类似于1213取水 可以把空投当作第0个城市 最后将0~n的所有城市跑最小生成树 /* Written By StelaYuri */ #include<iostream> #includ ...
- Django整体架构
Django整体架构 用户能够访问到的所有的资源 都是程序员提前暴露好的, 如果没有暴露 用户就永远访问不了 用户能够访问到的所有的资源 都是程序员提前暴露好的, 如果没有暴露 用户就永远访问不了 一 ...
- LAMP环境搭建,防火墙开启,数据库挂载在逻辑卷
具体要求: 1. 源码部署 LAMP 环境, 和生产保持一致 2. 静态资源文件同步生产环境 3. 需要同时部署 2 个 web 网站 步骤: 一. 需要的安装包. 提前准备好. apr-util-1 ...
- Linux inode 理解
inode 硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB).操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性读取一 ...