思维
左佥都御史
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #717 (Div. 2)
三题睡觉A 给定一个数字和一些操作限制k,每次可以对一对数+1 -1,问你逻辑最小的数组。方法:贪心,减最左边的。#include <iostream>#include <cstdlib>#include <bits/stdc++.h>using namespace std; int main(){ int t,m,n,a; cin>>t; vector<int>v; while(t--){原创 2021-04-24 22:23:52 · 169 阅读 · 0 评论 -
差分数组与树状数组区间更新
查分数组差分数组是通过维护相邻元素的差值,来实现对多次区间操作的优化。(第一次见)比方说给定多次操作 a,b,c, 对[a,b]内元素都+c 。然后求各元素的值如果是普通的暴力求法,每次对[a,b]复杂度太高了。所以我们整一个优化的技巧。穿件一个差项数组。c[i]=a[i]−a[i−1](i>=2)c[i]=a[i]-a[i-1](i>=2) c[i]=a[i]−a[i−1](i...原创 2019-11-04 21:38:58 · 504 阅读 · 0 评论 -
B. Mahmoud and a Triangle-水水的-codeforce
本来我都不想写这一道题了,结果一查,题解还那么多。如果还是比较有趣的。。 给定一个数n,然后给你n个数,问这些数是否能构成三角形。 原文给的是 这个单词。A non-degenerate triangle,不退化的三角形,后经必应发现 不退化三角形就是 退化三角形是指面积为零的三角形。满足下列条件之一的三角形即可称为退化三角形:三个内角的度数为 (180°,0°,0°) 或 (90°,90°,原创 2017-04-07 22:12:35 · 268 阅读 · 0 评论 -
A - The Fault in Our Cubes Gym - 101257A (dfs+回溯)
有三种方块,给一个字符串,判断这些方块能否构成一个3*3的正方体,其中方块分别有如下作用 E型,只能出一条线,很明显只能作为线头;并且只能有俩,所以好像特判,但是I和L型都是可以互换的,, I型能穿过。 L型能在插入方向的垂直平面上开一个小孔, 方法 的重点是回溯,不断的试错,并且从不同的地方作为重点进行判断,本质是暴力。。 还有就是 对于结果的保存,直接return1原创 2017-03-17 20:28:11 · 297 阅读 · 0 评论 -
Gym - 101257G 24-二分和upper_bound的应用
输入有人数 和一道题的分数 在输入每个人的当前分数和 他做不对这道题的概率 问有实现反超的概率(每个人的反超概率相加) 因为考虑到加法原理,所以这种概率是可以累加的, 还有一种情况就是,如果分数是10分,一个人15,一个人2分,那么即使那个人作对了题 12<15仍然无法实现反超。 思路,二分,求出 a[i]—a[i]+sa(题目分数)这其中的概率相加(都是做不对的概率哦),然后再乘以 本原创 2017-03-22 17:46:49 · 310 阅读 · 0 评论 -
101097B-思维,vector的resize和assign
too young too naive。 开始做过一道判定三角形的水题,直接排序判断就行,但是这个有颜色限制。没有考虑到。。 方法1 假设一个盒子,保证这个盒子里有三种不同颜色的棍子, 如果加的一个棍子中和盒子里有重复的,就把盒子里的替换掉。 如果没有的话,就找辣两个最大的和这个比。 注意:后续的添加及处理都保证0位和1位是俩大的。0最大。第二个代码和第一个很像。 对于vector的理原创 2017-04-28 20:42:26 · 2069 阅读 · 1 评论 -
思维题-POJ1852-挑战程序设计2
https://vjudge.net/problem/POJ-1852 给定一个竹竿,和一群蚂蚁,给定蚂蚁距离竹竿左端的距离。 蚂蚁的方向是未知的,速度都是1米一秒,如果相遇了他们会扭头反向走,问你最短的时间和最长的时间 1 穷竭搜索。。会超时的。 2 我发现了一个规律,但是还是一直wa。。还是没想明白怎么回事,后面我会把那个错的先交到这里,有时候在想。 1 ac代码(参考白书)#incl原创 2017-04-29 14:58:37 · 275 阅读 · 0 评论 -
Codeforces Round #410 (Div. 2)-B. Mike and strings-string的使用和取模
给定一些字符串,每次把对头的放在最后,问需要多少操作才能让他们相等 开始以为是贪心,或者感觉无处可贪,应该是暴力。 题解中大概有三个版本。 第一个最简单的,因为运用了stl中的find函数,所以比较简单了 因为要涉及循环比较,所以每个串都加了一倍的长度。 然后直接find就好。 两个代码的整体实现方法都一样,但是用的手段不一样。 一个是用的stl(棒棒哒) 另一个是用的取模的思想和一原创 2017-05-01 12:41:09 · 338 阅读 · 0 评论 -
Gym - 100623I Important Wires-翻译题。水题
Nick bought a new motherboard for his computer and it seems 耐克给他电脑买了一个电路板但是这个电脑好像坏了, that it does not work properly. The 并且主板(motherboard)非常复杂,就像一团面条,只有几个非常非常重要的线头,这些线头 有两种状态,真或者假。 motherboard is原创 2017-04-19 19:20:42 · 359 阅读 · 0 评论 -
杨辉三角最优解法
#include <stdio.h>#include <stdlib.h>int main(){ int s = 1, h; // 数值和高度 int i, j; // 循环计数 scanf("%d", &h); // 输入层数 printf("1原创 2017-05-02 12:37:20 · 925 阅读 · 0 评论 -
Gym - 101350E-Competitive Seagulls-博弈-思维
https://vjudge.net/problem/Gym-101350E 题解见代码注释。#include <bits/stdc++.h>/*博弈,两个海鸥在玩游戏,长度为l的一个绳子,一个在左边,一个在右边,每次可以把 p段染黑,问最多谁无路可走。p的要求是 p<=(L/2)向上取整会发现每次1赢得概率都大1的策略是这样,每次1都拿到最多的一半,不管l是奇数还是偶数,当1第一次拿原创 2017-04-21 10:41:45 · 1015 阅读 · 0 评论 -
贪心-Codeforces Round #404 (Div. 2)
看到最大值,就以为是用二分。但是一直超时。 主要是自己solve的方式不对,每次solve都要0n2,来判断是否有大于当前mid的距离。得不偿失。。 一开始暴力写,没有考虑先后顺序,,其实再改动一下就对了。。 哎,too young too naive。。 问题要分析清楚,套路才耍的号。。 两种情况,一种是象棋在前,另一种#include <iostream>#include <cstd原创 2017-05-03 18:56:47 · 207 阅读 · 0 评论 -
CodeForces - 808B-思维
水题,但是偶然发现了更好的代码。。 n个数,每k个相加。结果除以n-k+1. http://codeforces.com/problemset/problem/808/B 本来是发现出现次数j的规律 分别是 1 2 3 k kkkkkk3 2 1这样, 前面的数 用i来确定 后面的是n-i+1,来确定。 其他的部分 是 k 和 n-k+1 k是理论上出现最多的数。原创 2017-05-23 12:22:50 · 345 阅读 · 0 评论 -
水题-nefuoj-1171
给定一个n ,要求x+y+z=n并且要求 xyz的乘积最大,开始用的三个for的枚举,tle用的两个for的tle。。后来仔细研究规律,发现是个规律题。也可以直接算这三种情况,然后比一下大小,这样比较快。恩。。#include #include using namespace std;int main(){ long long m; long lon原创 2017-05-04 17:45:40 · 255 阅读 · 0 评论 -
Codeforces Round #410 (Div. 2)-A. Mike and palindrome-思维
。。一道题都不会写,不知道这样下去还有什么意思。。 给你个串,如果这个串可以改动一个字符就变成回文串 那么就输出yes。 没有考虑如果本身也是回文串但是是奇数长度,改变中间那个也行。。#include <bits/stdc++.h>using namespace std;int main(){ char a[20]; cin>>a; int len=strlen(a);原创 2017-04-23 16:26:10 · 283 阅读 · 0 评论 -
思维-Gym - 101341B-好题(5-5-B)
给定一个字符串,问你是否可以移动两个数,让这个字符串中不出现”happiness”。如果是的话就输出两个位置。如果不能的话就输出no 如果happiness出现超过三次以上,一次只能破坏两个,所以一定是no 如果出现两次,记录每个的 h和i,将第一个的h和第二个的i调换即可。 如果出现一次,将第一个的h和i调换。 如果没有,输出 1 2 重点来了。数据可能是这样。 ahppiness,这原创 2017-05-05 05:01:51 · 307 阅读 · 0 评论 -
Codeforces Round #412-E-Prairie Partition
http://codeforces.com/contest/807/problem/E 给定你一些数,问你合成一些序列, 这些序列必须是 1 2 4 8 r r必须小于16. 问你能合成多少种这种串。并输出每种的串数。 因为发现最大的数量也不过是1的数量。 记录他们每个 pow(2,i)的数量。 之间的数量(做r)。 并且发现 其实是一个区间,只要二分枚举他们的区间就行。 如果 存在原创 2017-05-24 22:50:07 · 325 阅读 · 0 评论 -
翻译题-思维-Gym - 101341C
http://codeforces.com/gym/101341/problem/C 硬是看不懂什么意思,和队友都把这道题想复杂了。 Megabrain has usual problems with the occupiers: he is captured again and is forced to solve logical puzzles about urns with balls.原创 2017-05-06 19:32:59 · 556 阅读 · 0 评论 -
Codeforces Round #408 (Div. 2)-C. Bank Hacking-(三种方法)分类讨论,二分,集合
补题速度太慢了,这样可不行啊。 代码里都有解释。 看别人代码有三种写法 set,分类,和二分。 这是个是用分类思想写的,#include <bits/stdc++.h>using namespace std;/* 一开始我以为是图论的,但是他说有直接相邻的和间接相邻的,我就有点蒙蔽了。题意也没看完全明白,要求他的下一次hack的银行附近一定也有被hack过的。要求他不能跳来跳去的h原创 2017-04-19 20:52:24 · 333 阅读 · 0 评论 -
ACM课-Rightmost Digit-规律
n^n的最右边的数。 以前是打的大数的板子写的,后来发现如果时限要求的在短点,也可以用规律,。 手写出来,发现有规律。#include <iostream>#include <cstdio>using namespace std;int a[10][6]={{0},{1},{6,2,4,8},{1,3,9,7},{6,4},{5},{6},{1,7,9,3},{6,8,4,2},{1,9}原创 2017-05-17 19:39:47 · 325 阅读 · 0 评论 -
高精度-n的阶乘
#include <iostream>#include <cstring>#include <cstdio>using namespace std;int main(){ const int maxn=20000; int n,c,k; int f[maxn+1]; while(cin>>n) { memset(f,0,sizeof(f)); f[0]=1;原创 2017-05-17 19:55:43 · 277 阅读 · 0 评论 -
贪心-今年暑假不AC-nefuoj
http://acm.nefu.edu.cn/JudgeOnline/contestShow.php 每次挑选最先结束的看。。#include <iostream>#include <cstdio>#include <algorithm>#include <vector>using namespace std;int cmp2(pair<int,int> a,pair<int,int>原创 2017-05-17 20:14:43 · 256 阅读 · 0 评论 -
nefuoj67-思维-自动求循环节
A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.Given A, B, and n, you are to calculate the value of f(n). Input The input consists of multiple原创 2017-05-09 12:16:54 · 266 阅读 · 0 评论 -
HDU - 4572 -公式推导&&思维胆量....
https://cn.vjudge.net/contest/165541#problem/H 开始知道是构造。但是因为没有写过构造题就没有办法了。 代码超级短。但是网上的数学证明就很长很长。。 附赠连接。。。http://blog.csdn.net/spark_007/article/details/9017533 经过数学证明: 最大的那一行排列一定是 m,m,m-1m-1,m-2,m-原创 2017-05-29 18:38:30 · 596 阅读 · 0 评论 -
acm课-求n^n的最左边的数字
技巧题,陈宇老师不愧是数学系出身,果然很牛,尤其记得大二他给队伍讲高斯消元,好像没人听得懂,。。。。 方法,先取log,然后在将整数部分减掉。#include <iostream>#include <cstdlib>#include <cstdio>#include <cmath>using namespace std;int main(){ int n; int t;原创 2017-05-09 19:06:17 · 1602 阅读 · 4 评论 -
Gym - 101341D Jumps-对gcd的理解
起点1 终点n,给定一些数,,从1到达n,可以使用那些数中的任意一个。 (还可以反向) 开始一点思路都没有,后来队友灵机一动,说可能是求gcd,但是当时并不怎么清除为什么,我隐约觉得也是哈,就直接写了,没想到对了,本来都忘记了这一道题,但是看铭神博客上有这道题。 让大神都写博客了肯定很好。 其实 思路很好理解,对gcd的运用,一个数的gcd是什么呢,如果只用这两个数行走,那么gcd就是他们可原创 2017-05-10 12:02:24 · 311 阅读 · 0 评论 -
Gym - 100971G- Repair-思维题
给定你一个 a*b的矩形 每次切割时只能平行边界的切割。 给你两套 a,b问你是否能切割下来这俩矩形。我一开始以为 只要判断对角线就行了。。。。 但是用sqrt竟然样例都不对。幸好队友过了。。 看了大神的代码。 模拟两种情况,因为是平行的情况,是并列 所以一个是相加,一个是取最大。 qrz#include <iostream>#include <cstdio>using names原创 2017-05-19 16:39:35 · 322 阅读 · 0 评论 -
Gym - 100971B-思维-特殊情况
https://cn.vjudge.net/contest/164409#problem/B 给定一个序列,如果他的序号和他的值一样,那么他就是不正经的。 问你最少经过多少次操作,能够他们都变成正经的(值和序号都不一样) 要是偶数 直接就除以2就行,奇数就加1. 偶数两两交换, 奇数随便拉一个本来就不符合情况的值和他交换(是地址还是值不用考虑,哈哈,真的,就是顺序问题) 第一个wrong原创 2017-05-19 16:48:29 · 241 阅读 · 0 评论 -
HDU-4567-思维-Brilliant Programmers Show -13长沙邀请赛
https://cn.vjudge.net/contest/165541#problem/C给定一群人(初始排名是i)的成功挑战次数。 规则是 每次和比他排名前面那个人挑战,如果赢了就互相换排名 问你是否可以确定冠军。 每个人的成功挑战次数都是一定的,他把所有的人都打败了就再也不能了,并且在这其中他也输过 这就是最大的挑战次数。 最大就是他从最后打到最后,先打最后把,就是把他排名后面的数都原创 2017-05-31 19:03:29 · 378 阅读 · 0 评论 -
HDU-5978-思维+概率
https://vjudge.net/contest/166094#problem/H 猜测样例写的过了。。没怎么搞明白概率什么鬼。 看题解。 k个黑球,1个红球,问你取红,先手是否有优势。 什么鬼的优势。。就是赢得概率 没一回合概率都是 1/(k+1),如果是奇数,那么概率相同。(奇数是偶数个球啊-.-) 偶数就一样。。#include <iostream>#include <cst原创 2017-06-05 12:46:52 · 529 阅读 · 0 评论 -
C. An impassioned circulation of affection-尺取法或者DP
给定一个串,再给你一群字母s+数字m 问你可否改变m个数字,使连贯的s字母最长。 根本没思路。。。 看的大牛的代码,真是写的太好了只是有一点卡主了,那就是我每次是取得最小的。。 应该取最大的,卡一定的长度,这个长度内需要k个字母来装填,使其从头到尾都是s字母。当然越长越好啊。 越长说明里面本来包含的s字母就越多。O(∩_∩)O哈哈~#include <iostream>#include原创 2017-06-16 21:57:49 · 237 阅读 · 0 评论 -
CodeForces - 808A-思维题
http://codeforces.com/problemset/problem/808/A 给你一个数,问你下一个最近的幸运年是多少 (幸运年就是至多有一个非零数) 先找到这个数的最高位的数,加1,然后减去,就是了。 比方说99,最高位是9,加1,是100 然后在减去n,就行了。 这是我见过的最好的。#include <iostream>#include <cstdio>#incl原创 2017-05-21 20:18:17 · 350 阅读 · 0 评论 -
hdu5491-位操作模拟
https://vjudge.net/contest/167400#problem/H 定义一种数,当他的二进制中1的个数在s和t之间,就叫他 next数,给定一个数,已经是next数了,问你下一个next数是谁。 比赛的时候没有想出来,用暴力枚举的方法肯定超时。以为是规律题,但是找不到,后来发现就是一个模拟。 每次如果1的个数大了,就找右边第一个,1,加上他的数, 他就变成0了, 如果1的原创 2017-06-17 15:51:48 · 220 阅读 · 0 评论 -
HDU-5578-暴力枚举
https://vjudge.net/contest/167609#problem/F 给定一个字符串,问你相同字母之间的最近距离。 用一个vector记录各个字母的相对位置。 取最小的。然后两两相减取最小。 为了防止字母第一次出现时的情况,预先填一个数。#include <iostream>#include <cstdio>#include <vector>#include <cst原创 2017-06-18 19:10:35 · 351 阅读 · 0 评论 -
HDU - 4493-精度控制-四舍五入
学了一招,某位四舍五入 ,就是加上0.x5*0.1(比精度大1),在乘以精度范围,变成int。 。 给定十二个数,要求保留两位,四舍五入#include <iostream>#include <cstdio>#include <cstdlib>#include <queue>using namespace std;int main(){ int n; cin>>n;原创 2017-06-02 22:56:52 · 265 阅读 · 0 评论 -
Educational Codeforces Round 22-B. The Golden Age-暴力枚举+map
http://codeforces.com/contest/813/problem/B 给定一个a和b 如果满足 pow(a,i)+pow(b,j),就说这个数不幸运 求一个区间内最大的没有不幸运数的区间。 数据范围 Input The first line contains four integer numbers x, y, l and r (2 ≤ x, y ≤ 1018, 1 ≤原创 2017-06-07 19:24:09 · 331 阅读 · 0 评论 -
HDU5573-二进制思想-构造
https://vjudge.net/contest/167609#problem/B 没有想到二进制,以为是在树上dp。。。所以也不知道怎么dp。。 首先可以确定的是 满二叉树 最左面的可以表示所有的值。 但是题目要求 不是加就是减,所以一个减号相当于两倍的减(每一项相加得到结果,这个数变为负的) 就是算出 (1<#include <iostream>#include <cstdio>原创 2017-06-19 22:07:31 · 264 阅读 · 0 评论 -
HDU-5583-暴力
给定一个串,规定sum为连续数字相同的长度的平方和。 比如 000011 sum为 4*4+2*2=20; 最多可以改变一个数字,也可以不改变,问你最大的sum是多少。 我的想法是改变的地方为 10 和01 ,总共有四种情况可以改变 10 变 11 和 00 01 变 00 和11 . 然后枚举四种情况。(寻找子串) 然而超时。 用暴力匹配,枚举合并的情况更好。但是要注意,一开始原创 2017-06-20 10:54:00 · 352 阅读 · 0 评论 -
Codeforces Round #417 (Div. 2)-A. Sagheer and Crossroads-模拟
水题。 没有考虑当前有行人的时候,当前也是不能过车的。。 一个十字路口,给定方向,第i行表示第i个路口的状态 1 表示往左,2 表示往中间,3表示往右,4表示行人 一个为1说明当前是有车(or人)的。问你是否可以发生事故。 发现了数组应该是 4 3 2 1 4 3 2 1 4 3 2 1 但是一直wa。还过了二十几组,十分郁闷。。#include <iostream>#incl原创 2017-06-20 19:48:44 · 236 阅读 · 0 评论 -
Codeforces Round #304 (Div. 2)-C. Soldier and Cards-简单模拟
http://codeforces.com/problemset/problem/546/C 两个人各有一堆牌,那堆牌各个数不一样。 如果a比b的大(牌顶),那么就先把b的放在牌下面,再把a自己的牌顶放到牌下面。 问你多少回合 可以赢,谁赢。 如果无法分出胜负,就输出-1. 为什么说这个模拟简单呢。。因为数据太小了,并且赤裸裸的队列啊。。 但是在判断是否能判断的情况,出现了一些差池,开始原创 2017-06-20 21:35:45 · 178 阅读 · 0 评论