AtCoder Beginner Contest 137
前言
又是卡在了T4 , 总分 100 + 200 + 300 = 600pts rank 2449。以后还是要多积累比赛经验。
A
输出a+b,a-b,a*b中最大的数,还要多简单?不挂代码了
B
题目描述
- 数字线上有2000001块石头。这些石头的坐标是- 1000000,- 999999 ,- 999998 ,... ,999999 ,1000000。其中,一些ķ连续的石头涂成黑色,其他石头涂成白色。另外,我们知道坐标X处的石头黑色的。打印所有可能包含黑色石头的坐标,按升序排列。
数据范围
- 1 ≤ ķ ≤ 100
- 0 ≤ X ≤ 100
- 输入中的所有值都是整数。
看不懂?(我也看不懂) 还是看样例算了(我是看样例懂的)
样例输入 3 7
样例输出 5 6 7 8 9
解释: 我们知道有三块石头漆成黑色,坐标7处的石头漆成黑色。有三种可能的情况:\(567\),\(678\),\(789\) ,故56789
题解
这下懂了吧?
以x为原点,向左延伸k格,向右延伸k格,输出这个区间。
Code
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#define N 1000000
using namespace std;
inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}
int k,x;
int main()
{
k = read() ,x = read();
int l = max(-N , x-k+1);
int r = min(N , x+k-1);
for(int i=l;i<=r;++i)
printf("%d ",i);
return 0;
}
C
题目描述
给定\(n(2<=n<=10^5)\)个字符串,问有多少对字符串本质是一样的(即组成的字母一样)?
如 killbunny
和 bunnykill
本质是一样的,所以他们构成一对本质一样的字符串(题目保证全是小写且字符串长度均为10)。
题解
想到了把每种本质相同的字符串变成一样的
或者直接说每个字符串排一下序,如 bbbcccaaad
变成 aaabbbcccd
(按字典序),就解决本质相同的字符串了
用map来处理本质相同字符串有多少个,然后考虑每个本质相同的字符串的贡献
举例 : 如果本质都是 killbunny
的字符串有3个,这中间就能两两连线连出 2 + 1条线,脑补一下,不难发现,如果本质都是killbunny
的字符串有4个,两两配对就能有3 + 2 + 1条线。 故有本质相同的字符串m个,就有n-1 + n-2 + ... + 2 + 1条线,也就是有多少对。根据公式可以快速算这个结果。
Code
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define int long long
using namespace std;
inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}
const int N = 1e5+7;
map<string,int> mp;
string name[N];
int n,cnt,ans;
signed main()
{
cin>>n;
int len = 10;
for(int i=1;i<=n;++i) {
char s[15];
cin>>s;
sort(s,s+strlen(s));
if(!mp[s]) name[++cnt] = s;
mp[s]++;
}
for(int i=1;i<=cnt;++i) {
int num = mp[name[i]];
num--; ans += ( (1+num)*num ) / 2;
}
printf("%lld\n",ans);
return 0;
}
D
贪心 + (堆?)
题目描述:
数据范围
题解
贪心策略:按时间将任务排序,把 \(i\) 时刻能做的任务都扔进堆里 , 因为任务是一次性的,所以每个任务放进去过就不再放入了。然后每个时刻看一下堆里面有没有数,有的话就取堆顶出来,而且每个时刻只能取一次。正确性显然。
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x*f;
}
const int N=1e5+7;
int n,m,ans;
struct Node{
int a,b;
bool operator < (const Node &x)const {
return a < x.a;
}
}t[N];
priority_queue<int>q;
int main()
{
n=read() ,m=read();
for(int i=1;i<=n;++i) {
t[i].a=read(),t[i].b=read();
}
sort(t+1,t+1+n);
for(int i=1,j=1;i<=m;++i) {
for(;j<=n;++j) {
if(i<t[j].a) break;
q.push(t[j].b);
}
if(!q.empty()) {
ans += q.top();
q.pop();
}
}
printf("%d",ans);
return 0;
}
E
题目描述
给你一张有权有向图(权值叫做硬币),初始在1节点,有0硬币,每走一条路花费p硬币,到达n节点可以选择结束或者不结束,问可否有权值最大,有就输出,没有就输出-1。
n<=2500 m<=5000
题解
遇到这种题目可以先把每条边减去p,这样就是经过这条边可获得的权值了。
如果从某个点u到v可更新权值,那么就更新一下。
如果更新了n次还能更新就说明形成了可以无限更新的环,则置为INF
Code (如果有那位大佬理解得更透彻欢迎评论解释一下)
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
#define N 2507
#define M 5007
#define int long long
using namespace std;
inline int read() {
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
return x * f;
}
const int INF = 1e18; //longlong的INF不是0x3f3f3f
int n,m,p;
int f[N];
struct Edge {
int u,v,d;
}E[M];
signed main()
{
n = read() ,m = read() ,p = read();
for(int i=1,u,v,d;i<=m;++i) {
u = read() ,v = read() ,d = read();
E[i] = (Edge){u,v,d-p};
}
for(int i=1;i<=n;++i) f[i] = -INF;
f[1] = 0;
for(int i=1;i<=n*2;++i) {
for(int j=1;j<=m;++j) {
int u = E[j].u ,v = E[j].v ,d = E[j].d;
if(f[u]==-INF) continue;
if(f[u]+d > f[v]) {
f[v] = i<=n ? f[u]+d : INF;
}
}
}
if(f[n]==INF) puts("-1");
else if(f[n]<0) puts("0");
else printf("%lld\n",f[n]);
return 0;
}
F
先挖坑,待会去学怎么做
AtCoder Beginner Contest 137的更多相关文章
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 137 D题【贪心】
[题意]一共有N个任务和M天,一个人一天只能做一个任务,做完任务之后可以在这一天之后的(Ai-1)天拿到Bi的工资,问M天内最多可以拿到多少工资. 链接:https://atcoder.jp/cont ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
随机推荐
- 170815-关于Session知识点
Cookie:实际上就是一个头. 服务器会创建Cookie,并且将Cookie以一个响应头的形式发送给浏览器 浏览器收到Cookie以后,会保存 ...
- Mybatis一对一关联查询
有两张表,老师表teacher和班级表class,一个class班级对应一个teacher,一个teacher对应一个class 需求是根据班级id查询班级信息(带老师的信息) 创建teacher和c ...
- WIN7系统JavaEE(java+tomcat7+Eclipse)环境配置
https://jingyan.baidu.com/article/3a2f7c2e62d25e26afd611fa.html WIN7系统JavaEE(java+tomcat7+Eclipse)环境 ...
- template标签就相当于React中的fragment
template标签就相当于React中的fragment
- AWK之随心所欲-基础篇
一.简介 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及 生成报表等等. 在 Linux 系统下默认 awk 是 gawk,它是 awk 的 GNU 版本. ...
- list、tuple、dict加*星号
*相当于解压的作用,当list中只有一个元素时,利用*作用相当于直接去[],去[]后的数据类型是字符串. _list = [1,2,3] _tuple = (1,2,3) _dict = {1:'a' ...
- VGA时序及其原理(转载)
显示器扫描方式分为逐行扫描和隔行扫描:逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信 ...
- 5G调研与总结
5G的重点是: 将极大地超越现有的4G,主要包括速度,时延,带宽,能耗等方面 传输速度的快速提高(相对于4G来说提升了近10倍),在万物物联上的作用会更大 由于传速度快,让各种远程操控成为了可能(AR ...
- webpack前端模块打包器
webpack前端模块打包器 学习网址: https://doc.webpack-china.org/concepts/ http://www.runoob.com/w3cnote/webpack-t ...
- SpringBoot内嵌数据库的使用(H2)
配置数据源(DataSource) Java的javax.sql.DataSource接口提供了一个标准的使用数据库连接的方法. 传统做法是, 一个DataSource使用一个URL以及相应的证书去构 ...