[链接] 我是链接,点我呀:) [题意] 给你一个n*m的地图. 每个地图为0的时候可以安全走过,且走过后变成1. (一定要离开之后才会变成1) 而为1的则走过之后会掉入下一层. 你一开始在初始位置(x1,y1); 且你想到达位置(x2,y2); 且要求到达(x2,y2)并且掉进下一层. 保证(x1,y1)的状态为1. 问你可行与否 [题解] 首先如果x1,y1和x2,y2重合. 那么判断一下周围有没有可以走的0状态就好->走过去再走回来 如果没有就无解 如果不重合. 那么首先判断一下(x1,y…
[链接] 我是链接,点我呀:) [题意] 给你一个无限长的序列1,2,3,4... 然后给你n个操作. 每个操作ai,bi; 表示调换位置为ai和位置为bi的数的位置. (ai,bi<=10^9) n个操作结束之后,问你序列中逆序对的个数. [题解] 肯定和数据结构相关的. 那么大,首先离散化一下. 然后用离散化后的数字来模拟这个swap的过程. 这样,就能够获取出有操作过的数之间的大小关系了. 然后用树状数组来处理这些"有操作过的数字"的逆序对. 但是还不够. 因为可能还有一些…
[链接] 我是链接,点我呀:) [题意] 剪刀.石头.布各有r,s,p个生活在同一个村子里. 它们两两之间相遇的几率都相同(相遇后就会按照划拳的规则判断输赢,输的人就死掉了). 问你最后只剩下剪刀,只剩下石头.只剩下布活着的概率. [题解] 动态规划 如果从输赢方面去考虑的话很难找到解. 设f[i][j][k]表示石头,剪刀,布分别剩下i,j,k只活着的概率. 显然有ij+ik+jk种可能. 而(i,j,k)这个状态,变成(i-1,j,k)这个状态,显然就是石头的个数减少1了. 那么就是石头遇到…
[链接] 我是链接,点我呀:) [题意] 已知k门成绩. 总共有n门成绩. 让你构造剩下的n-k门成绩,使得这n门成绩的中位数>=y,并且这n门成绩的和要小于等于x. n为奇数 [题解] 首先判断k门成绩的和是不是小于等于x. 然后x-sum就是剩下的n-k个数字最多能填的和. 可以这样. 既然中位数要大于等于y; 那么转化为让(n+1)/2个数字都大于等于p; 则在剩下的n-k个位置凑足(n+1)/2个p就够了. 凑够了就都用1填就好. [代码] #include <bits/stdc++.…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟水题 [代码] #include <bits/stdc++.h> using namespace std; const int N = 1000; //no pain no gain int a[N+10],b[N+10],n; int get_ans(int x,int y){ int temp = x; int ans = 0; while (temp!=y){ ans++; temp--; if (temp<0…
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需要的最小花费是多少. [题解] 枚举gcd为i. 这里的枚举,并不是说确切这些数字的gcd就是i; 而是枚举这些数的gcd是i的倍数. 这样的话,每个数字都必须是i的倍数. (然后,我们只要贪心地让每个数都变成i的倍数就好了,最近的i的倍数,这样肯定是最优的) (最后gcd到底是多少,并不重要,只要…
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和弹出操作都恰好各n个; 且压入的n个数字都各不相同; 在弹出栈的时候你可以把栈中的元素重新排列; 要求弹出的数形成的数列恰好组成1..n; 问你最少需要重新排列多少次; [题解] 对于每一个remove操作,其实已经能确定接下来要输出的是几了; 在进行重新排操作的时候; 你可以假定自己"很聪明&qu…
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一条直线的方程y=1mx+b 给你m和b; 让你在这条直线以下选一个长方形; (长方形的边都要和坐标轴平行,见样例图); 然后你可以把整个长方形内的所有点上的香蕉都拿走; 问你最多能拿走多少个香蕉; [题解] 枚举长方形的右竖边的x轴坐标; 可以得到上边的y坐标(当然取最大了); 左竖边当然是x=0了…
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q和同一列的元素w; 使得q+w=a[x][y] [题解] O(N4)模拟 [Number Of WA] 0 [反思] 不用考虑会选到a[x][y]本身. [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt…
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i个字符t[i],在k[i]个位置出现过; 且告诉你这k[i]个位置在哪里; 数据不会产生矛盾; 让你输出最终的字符串,输出字典序最小的那个; [Solution] 对于输入的n个子串; 对于每个位置; 看看那个位置有没有子串之前出现过,没有的话,就放在那个位置; 否则,如果当前这个子串ti的长度比原…
[Link]:http://codeforces.com/contest/828/problem/B [Description] 给你一个n*m的格子; 里面包含B和W两种颜色的格子; 让你在这个格子中画一个正方形; (大小,位置自己选但要求覆盖到所有现有的黑棋子); 然后,把里面的白棋子,染成黑棋子; 问你最少需要染多少个白棋子; [Solution] 先得到一个矩形(这个矩形覆盖所有的黑棋子); 然后枚举所需要的正方形的左上角的位置; 这个正方形必然要覆盖这个矩形; 则这个左上角只能在这个正…
[Link]:http://codeforces.com/contest/828/problem/A [Description] 有n个组按照时间顺序来餐馆; 每个组由一个人或两个人组成; 每当有一个组来餐馆的时候; 按照如下优先顺序安排; ①组内只有一个人的情况 先看有没有空的单人桌,再看有没有空的双人桌,最后看已经有一个人的双人桌 ②组内有两个人的情况 只看双人桌; 如果不能找到符合要求的; 直接拒绝他们的请求; 问:有多少人会被拒绝; [Solution] 注意那里的顺序就好; 另外开一个…
[题目链接]:http://codeforces.com/contest/822/problem/D [题意] 有n个人参加选美比赛; 要求把这n个人分成若干个相同大小的组; 每个组内的人数是相同的; 然后每个组内的人,两两比较; 每个组得出最美的人; 然后每个组中最美的人再重复上述步骤; 直到只剩一个人; 问你如何选定每个阶段的分组; 使得比较的次数最少; [题解] 只考虑一轮的情况; 设x是分组后每个组的人数; 然后一共有n个人; 则这一轮比较的次数就为 nx∗x∗(x−1)2 ->n∗(x…
[题目链接]:http://codeforces.com/contest/822/problem/C [题意] 有n个旅行计划, 每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述; 让你在这n个旅行计划中选出两个计划; 要求这两个计划的日期没有相交的部分; 且这两个日期的总时间长度恰好为x; 让你求最小花费 [题解] 先把每个计划按照左端点第一优先级,右端点第二优先级升序排序; 然后定义一个dp[x]数组,表示在前i个计划中,时长为x,且右端点的位置< a[i].l的一个旅行…
[题目链接]:http://codeforces.com/contest/822/problem/B [题意] 让你用s去匹配t,问你最少需要修改s中的多少个字符; 才能在t中匹配到s; [题解] O(n2)的暴力搞就好; [Number Of WA] 1 [反思] 一开始判断的时候脑抽了; 写成只有s[1]==t[1]的时候才枚举; hack点是: 很多人两重for循环,没有给j层循环加限制; 直接两层循环1..n和1..m [完整代码] #include <bits/stdc++.h> u…
[题目链接]:http://codeforces.com/contest/822/problem/A [题意] 让你求a!和b!的gcd min(a,b)<=12 [题解] 哪个小就输出那个数的阶乘 [Number Of WA] 0 [反思] [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define L…
[题目链接]:http://codeforces.com/contest/820/problem/B [题意] 给你一个正n边形; 然后让你在这正n边行中选3个点,组成一个角; 找出角的大小和所给的角最接近的角; [题解] 同弧所对应的圆周角都是相同的; 而且每个正多边行都能作出一个外接圆; 所以随便选两个相邻的点;然后再选其他 n-2个点中的一个点组成角; 就能覆盖到所有的情况了; 顺序增加角的大小就好(一份一份地加); [Number Of WA] 0 [反思] 想说是B题; 就没往复杂的地…
[题目链接]:http://codeforces.com/contest/820/problem/A [题意] 每天看书能看v页; 且这个v每天能增加a; 但是v有上限v1; 然后每天还必须往回看t页; 问你最少多少天能看完; 一共有c页; [题解] 傻逼题. [Number Of WA] 1 [反思] 在处理超过v1的时候没搞好. [完整代码] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1…
[Link]:http://codeforces.com/contest/831/problem/A [Description] 让你判断一个数列是不是这样一个数列: 一开始是严格上升 然后开始全都是一个数字 然后又开始严格下降 [Solution] 枚举中间全部相同的是哪个数字; 假设是i..j这一段 则看看1..i是不是严格上升,以及j+1..n是不是严格下降; 如果所有的这样的i..j都不满足则无解; 找到一组则有解; [NumberOf WA] 0 [Reviw] 找到最特殊的地方: 抓…
[Link]:http://codeforces.com/contest/831/problem/B [Description] 两个键盘的字母的位置不一样; 数字键的位置一样; 告诉你第一个键盘按某个键,在第二个键盘上对应哪个键(大写.小写字母) 然后给你一段由第一个键盘输入的文本,问如果用第二个键盘输入,会输出什么. [Solution] 用map一一对应就好; [NumberOf WA] 0 [Reviw] 这种对应关系的题,map无敌; [Code] #include <bits/std…
[Link]:http://codeforces.com/contest/831/problem/C [Description] 有一个人参加一个比赛; 他一开始有一个初始分数x; 有k个评委要依次对这个人评分; 依照时间顺序依次给出这k个人的评分(可能为负数,负数的时候,表示分数会降低,而如果为正,则分数增加); 然后有一个人记得这k次评分中的n次评分过后这个人的评分; (即知道其中k个评委评完分之后,那个人的k个即时分数) (这k个分数各不相同); 问你x有多少种不同可能; [Solutio…
[Link]:http://codeforces.com/contest/832/problem/D [Description] 给你一棵树; 然后给你3个点 让你把这3个点和点s,t,f对应; 然后s先从s走到f; 之后t再从t走到f; 求这两条路径的公共路径的长度; [Solution] 答案为 dis(s,f)+dis(t,f)−dis(s,t)2 树上最短路径做一下就好; LCA! [NumberOf WA] 0 [Reviw] 想得太慢了 [Code] #include <cstdio…
[Link]:http://codeforces.com/contest/832/problem/B [Description] *能代替一个字符串(由坏字母组成); ?能代替单个字符(由好字母组成); 问你每个串能不能被匹配 [Solution] 对于没有*的情况; 先判断长度是否相同,不相同则不行; 否则看看问号所在的位置是不是?且,看看?对应的字母是不是好字母; 对于有*的情况; 先把左边和右边的字符和母串的对应位置对应起来; 左对齐比较和右对齐比较 然后中间部分就是用坏字母组成的字符串了…
[Link]:http://codeforces.com/contest/839/problem/B [Description] 给你n排的如题目所示的位置; 同一排中(1,2) 算相邻; (3,4),(4,5),(5,6)算相邻,然后(7,8)算相邻; 这里的(x,y)表示某个人坐在x,另外一个人坐在y的话. 问你够不够安排k组的人; 使得相邻座位的人都是相同组的人; 是则输出YES-. [Solution] 中间的那4个位置; 是没办法用来放不同组的成对的. 也即 xxyy不能放在中间那4个…
[Link]:http://codeforces.com/contest/835/problem/D [Description] 给你一个字符串; 让你在其中找到1..k阶的回文子串; 并统计它们的数量 如果一个字符串是一个回文串,则它可以是1阶子串; k阶字符串,要求它的左边和右边都是k-1阶子串; [Solution] bo[i][j]表示i..j这一段是否为回文; 可以用O(n2)的复杂度处理出整个bo数组; 然后O(n2)枚举每一段区间; 算出这个区间的字符串最大可以是一个几阶字符串记为…
[Link]:http://codeforces.com/contest/835/problem/A [Description] [Solution] 傻逼题. [NumberOf WA] [Reviw] [Code] #include <bits/stdc++.h> using namespace std; #define int long long int n,v1,v2,t1,t2; main(){ scanf("%lld%lld%lld%lld%lld",&…
[Link]:http://codeforces.com/contest/835 [Description] 原本有一个数字x,它的各个数码的和原本是>=k的; 现在这个数字x,在不改变位数的情况下,变成了n; 问你n和原来的数字x最少可能有多少位不一样. (x是未知的) [Solution] 如果各位大于等于k,直接输出0; 否则,先把n小的数码加到9; 一直加知道大于等于k; [NumberOf WA] 0 [Reviw] [Code] #include <bits/stdc++.h>…
[Link]:http://codeforces.com/contest/835/problem/C [Description] 给你n个星星的坐标(xi,yi); 第i个星星在第t秒,闪烁值变为(si+t)%(c+1); 给你q个询问,每个询问由时间t和一个矩形的左下角和右上角组成; 问这个矩形区域内的星星闪烁值的总和; [Solution] 朴素的做法; a[j][k][l]表示(j,k)这个点一开始闪烁值为l的星星有多少个; for (int i = 1;i <= q;i++){ int…
[Link]:http://codeforces.com/contest/834/problem/A [Description] [Solution] 开个大小为4的常量字符数组; +n然后余4,-n然后余4; 相同位置就不行; 否则 判断是哪一种方式到最后一个字符 (没有非法的情况,所以不用考虑两种方式都不是,可以看题目描述有说) [NumberOf WA] [Reviw] [Code] #include <bits/stdc++.h> using namespace std; #defin…
[Link]:http://codeforces.com/contest/834/problem/B [Description] [Solution] 模拟水题; 注意一个字母单个出现的时候,结束和开始一起写; [NumberOf WA] [Reviw] [Code] #include <bits/stdc++.h> using namespace std; #define int long long int n,k; char s[(int) 1e6+100]; int rest[500],…