09 2020 档案
摘要:这题是个暴力题目,挺水 代码来了,2重循环,1.06s #include <cstdio> inline int read()//快读 { int x = 0; char ch = getchar(); while(ch >= '0' && ch <= '9') { x = (x << 1) + (
阅读全文
摘要:分析题目,其实就是求非0值且不同的数的个数,用的是set,花了5秒多,这…… 先看代码: #include <iostream> #include <set> using namespace std; set <int> st; int main() { int n, x, y = 0; cin >
阅读全文
摘要:如果用循环应该会超时,所以这里用数论比较好 先分析题意得知,可以加上去,也可以减下来 减下来是 n mod m (n % m) 往上加是 m - n mod m (m - n % m) 为什么呢? n % m的结果就是多出的,减掉整除 m - n % m的结果就是少的,加起来也可以整除 代码: #i
阅读全文
摘要:这题其实不需要真得按照题意模拟,经过研究,其实我们发现,如果两个数之间绝对值大于等于2,就不行,否则可以 代码,不用数组: #include <iostream> #include <cmath> using namespace std; int main() { int n, a, b; cin
阅读全文
摘要:仔细观察,其实这个价格是可以抵消的 看: 价格 = (x1 - x2) + (x2 - x3) + (x3 - x4) + (x(n - 1) - xn) 所以会发现,x2和x2抵消,x3和x3抵消……其实最后就是x1 - xn 所以具体代码如下,用的是STL的vector,一会会讲到vector的
阅读全文
摘要:这道题和数论似乎有些关系,但我怎么想也想不出公式(我才小学5年级),于是只好循环了。 先说说为啥两层循环: 首先在同时尖叫时候,第一个人尖叫的可能第a次,第二个人可能是跟a差很多的,所以需要两层循环。本题限时1.00s,电脑一秒算一亿次,所以两次循环均要小于sqrt(100000000),循环次数是
阅读全文
摘要:这道题和数论似乎有些关系,但我怎么想也想不出公式(我才小学5年级),于是只好模拟了,两层循环,代码如下,707ms: #include <iostream> using namespace std; int main() { int a, b, c, d; cin >> a >> b >> c >>
阅读全文
摘要:这个题可以枚举,但是会严重超时,所以我们分析一下 如果每次四个数加起来除不了3,也就是不可能满足a + A = b + B = c + C,满足这个条件只有可能分三份 第二,就算可以分三份,如果a或者b或者c > 四个数之和除3,也不行,所以代码来了: #include <iostream> usi
阅读全文
摘要:2021.1.2 Update:更好的排版与推广博客 博客:https://www.luogu.com.cn/blog/332914/ 这个题目通常有两种解法,打表和map,打表要写很多 if,而 map 其实也是这样。 先要注意一点: 碰到一千和一百万是乘而不是加,例如 one hundred 不
阅读全文
摘要:这题挺水的,两个相同的合二为一就行了,具体参考代码如下: #include <iostream> #include <cstring> using namespace std; string a; int n; int main() { cin >> n; for(int i = 1; i <= n
阅读全文
摘要:这个题目细节是真的多,先说说-1是怎么回事,翻译中没有: 如果a,b,c,n的结果有问题,输出-1 比如以下这个样例: 2 2 0 4 两个人去了宴会A,两个人去了宴会B,没有人两个都去了,总共4个人,而全部也有4个人,看起来没问题啊?注意: 问有多少个人没有通过考试(至少有一个,因为主角没有通过考
阅读全文
摘要:这个题目很容易,一题多解,解法还是很多的,第一眼看见就想到直接sort就可以了 sort大家都知道,就没必要说那么多了吧? 但是sort的速度其实并不是很快,407ms,也能过了 代码: #include <iostream> #include <algorithm> using namespace
阅读全文
摘要:有些人这道题目使用了循环,这是个好方法,但是公式似乎更好吧? 首先先要注意题目的翻译和输入顺序不一样 The only line contains four integers k, n, s, p 先输入k,n,s,p,和翻译出现的顺序不一样哦 公式是这样算的: 先算一个人要几张纸,注意要向上取证,
阅读全文
摘要:准备NOIP入门比赛了,最近狂刷入门题目,感觉越来越简单 好吧,不说废话,这道题目不算很难,用了两次循环就AC了,86ms。 先说说题目意思吧: 有n个数,现在要求出递增子段最大数 以样例来看: 输入: 5 1 2 1 4 6 输出: 5 首先第一个1比2小,递增,现在最大 = 2 - 1 = 1
阅读全文
摘要:告诉我无是什么???
阅读全文
摘要:这个题目费了我好久啊,如果数据小一点,真的就是暴力红题,sort+reverse就ok了,但是最重要的问题还是数据 n, m <= 10^6 10^6 = 1000000 我们先想一下,如果从0开始循环到n-1,加上sort和reverse,肯定TLE,不过这么写也能拿Subtask #1的24分
阅读全文
摘要:其实这个题目要从数学角度分析: 如果输入数据全一样,直接输出n就好了 如果不一样最小的长度只有可能为1 vector代码来啦: #include <iostream> #include <vector> using namespace std; vector <int> vec; int main(
阅读全文
摘要:这个题目最难的点不是24进制时间,而是前导0 通过观察样例,我们发现,如果时或者分为0,输出“00”,如果时或者分为个位数,输出“0”时分,这个看似好处理,但如果用if占了整个程序一大半啊! 先来看看如何做24进制时间,其实比较简单的 for(int i = 1; i <= n; i++) { b+
阅读全文