数位DP学习心得

学数位DP还是要从搜索开始学才容易懂,一开始就丢DP的转移方程式90%的人都学不会。

B站上有一个视频讲得很好:https://www.bilibili.com/video/BV1gA411h7XC

他已经给出了模板,一个搜索的模板,代码精炼,只要把条件判断修改一下就可以套进去,非常好用,比DP好多了。

最后,所有讲解都在上面的视频里,请自行观看。

2021.2.6比赛心得

A - Vanishing Pitch:刚开始题目都没看懂......群中老师解释后才lijie了,第一题还真hand就行。

B - Remove It:尽管谷歌翻译不给力但是这题简直就是白送。输入如果与m相等就赋值为0,if(a[i]!=0)就输出。Attention:数据范围是10^9。

C - Digital Graffiti:这题题目都没看懂......谷歌吧输入的s全翻译成“小号”讲评时学长解释后才明白,不过学长那方法还真妙

D - Circle Lattice Points:ceil(x)是把x向上取整,floor(x)是把x向下取整

E - Come Back Quickly:用dijkstra。

F - GCD or MIN:

2020.2.6训练心得

熟悉的中文经过百度翻译我居然看不懂

A  青木君和他的好基友玩棒球

https://atcoder.jp/contests/abc191/tasks/abc191_a

有手就行


1
2
3
4
5
6
7
8
9
10
11
12
13
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
       ios::sync_with_stdio(false);
       int v,t,s,d;
       cin>>v>>t>>s>>d;
       if(d<v*t||d>v*s)
           printf("Yes");
       else
           printf("No");
       return 0;
    }

B  不玩球了玩删数

有手就行


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    #include<bits/stdc++.h>
    using namespace std;
    const int MAXN=100000005;
    int main()
    {
       int n,x,a[MAXN],upset=0;
       cin>>n>>x;
       for(int i=0;i<n;i++)
       {
           cin>>a[i];
       }
       for(int i=0;i<n;i++)
       {
           if(a[i]!=x)
           {
               a[upset]=a[i];
               cout<<a[upset]<<" ";
               upset++;
           }
       }
    }

C 玩方块

AtCoder家的虾可以一半好吃一半放生吗

WA

D 玩圈

???

E 玩最短路

先试了试Floyd直接超时,然后Dijkstra依旧超时

听了讲解说要堆优化

F 共cd和比较小的那个

我寻思这看上去挺简单的,结果发现我太年轻了

100+200=300

???

2月6日比赛感想

这次yy不知道又从哪里搜到一个奇奇怪怪的网站,日本的,叫啥AtCoder,在这网站打题,首先,英语过了十级再说,或者日语十级也行,实在不行的话也要找个靠谱的翻译,不然会翻译出一些奇奇怪怪的东西,其次呢,要选对语言,(苦逼的我编译错误了N次才发现选成C++了),然后要学习前十名的大佬那打字速度,可能你刚把题目看完,别人就全A了

任务A

没什么好讲的

题目看得懂就能打出来(有手就行)

任务B

这也就是一个删除数组元素一题,也没什么好讲的,不过要注意它的范围1e9 数组的话会超时,所以直接读一个判断一下,然后输出

任务C

这题就有点小难了,思路不好想,代码实现很简单,我是7号早上学长讲完后才A的(妙,妙,妙啊!) 具体的看直播回放吧

任务D没懂

任务E

dijkstra打,但是我不会,堆优化都不会(出大问题)

任务F

没听,当时去改C了,所以亿脸懵

python教学笔记1_如何读入两个数,以空格分隔

https://blog.csdn.net/zmxSuperIT/article/details/103948498

使用map函数将上面代码整理为一行

读入a,b以空格隔开


1
2
a,b = map(int,input().split())#这样就很简明了
print(a,b)

1
2
3
4
5
6
a,b,c=input().split()  #输入三个整数
b=int(b)               #进行强制类型转换
c=int(c)
a=int(a)
ans=b*b-4*a*c          #计算方程结果
print(ans)             #输出

python 打印/输出元素,用 逗号/空格 分隔

如果有个列表list1=[a,b,c]

用print打印后:

a

b

c

如果不想换行:

print(list,end="")

如果想用逗号分隔:

print(list,end=",")

但输出:a,b,c,

多了一个逗号

这时可以用:print(",".join(str(i)for i in list1))

在每个元素之间加入一个逗号,可以换成空格


1
2
3
4
5
a=int(input())
b=int(input())
for i in range(a,b+1):
    print(i,end=" ")
 

一维数组:

arr = input("") #输入一个一维数组,每个数之间使空格隔开

num = [int(n) for n in arr.split()] # //将输入每个数以空格键隔开做成数组

print(num) #打印数组

二维数组:

(以n*n的二维数组为例)

n = int(input()) #输入二维数组的行数和列数

line = [[0]*n]*n #初始化二维数组

for i in range(n):

line[i] = input().split(" ") #输入二维数组,同行数字用空格分隔,不同行则用回车换行

print(line) #打印二维数组

https://www.php.cn/python-tutorials-427886.html

差35分省一

emmmm

省赛前一天的代码没背下来

如果背下来了,那么我就180了

第三题题目是真的没看懂

第二题的话

想法还是要改进一下

不能一直用快排,要换一种想法

桶排的话是可以做出来的

哎呀

还是要努力一点

下次希望能拿个省一

奥利给

赛后心得

第一题:用二进制转换,然后记录,直接输出。

第二题:其实懂得有手就行,但是看到题目几乎都是第一时间想到快排,不然可AC的。

第三题:不懂就是不懂,骗到了5分。

第四题:不懂就是不懂,通过爆搜和骗分,骗到了25分。