![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LightOJ
裤头Kt
这个作者很懒,什么都没留下…
展开
-
LightOJ-1000-Greetings from LightOJ
题目传送门题意:输入T组数据,每组数据两个数,输出这两个数的和。#include <bits/stdc++.h> using namespace std;int main(void) { int T, cas = 1; scanf("%d", &T); while (T--) { int x, y; scanf("%d %d", &x,原创 2017-08-27 19:55:59 · 270 阅读 · 0 评论 -
LightOJ-1015-Brush (I)
题目传送门题意:求输入的灰尘的总体积,负数不考虑。思路:求和。#include <bits/stdc++.h>using namespace std;int main(void) { int T, cas = 1; scanf("%d", &T); while (T--) { int sum=0, n,x; scanf("%d", &n原创 2017-09-06 21:34:36 · 343 阅读 · 0 评论 -
LightOJ-1016-Brush (II)
题目传送门题意:有一个宽为w的刷子,刷子只能沿着x轴刷,有n个灰尘的坐标,问至少多少次才能刷完所有的灰尘。思路:排序之后直接枚举。#include <bits/stdc++.h>using namespace std;int y[50000+1000]; int n, w; bool cmp(int a, int b) { return a<b; } int main(void) {原创 2017-09-06 21:37:25 · 306 阅读 · 0 评论 -
LightOJ-1017-Brush (III)
题目传送门题意:一个二维平面上有N个灰尘,有一个宽度为w的刷子,一次可以刷一个w宽度的横线范围内的所有灰尘,只能刷k次,求刷的灰尘最多有多少。思路:动态规划,dp[i][j]表示前i个灰尘刷j次最多可以刷掉的灰尘数。状态转移方程为dp[i][j] = max(dp[i][j], dp[p-1][j-1]+sum)#include <bits/stdc++.h>using namespace std;原创 2017-10-21 10:15:53 · 245 阅读 · 0 评论 -
LightOJ-1019-Brush (V)
题目传送门题意:有N个路口和M条路,求从1路口到N路口的最短路径。思路:裸的最短路模板。#include <bits/stdc++.h>using namespace std;int mp[120][120]; int n, m; const int inf = 0x3f3f3f3f; void init() { for (int i = 0; i <120; i++) {原创 2017-10-21 10:18:45 · 291 阅读 · 0 评论 -
LightOJ-1020-A Childhood Game
题目传送门题意:有n个石头,一次一个人只能拿一块或者两块,如果Alice先开始拿,那么拿最后一块石头的人输,如果Bob先开始拿,那么拿最后一块石头的人赢。给出石头的个数和谁先开始拿,问谁能赢。思路:如果Bob先拿,则只要石头数是3的倍数就是Alice赢;如果Alice先拿,则只要是石头数-1是3的倍数就是Bob赢。#include <bits/stdc++.h>using namespace std原创 2017-10-21 10:26:14 · 306 阅读 · 0 评论 -
LightOj-1022-Circle in Square
题目传送门题意:给定一个圆的半径,求这个圆的外切正方形的面积与这个圆的面积差。思路:面积差为4*r*r-PI*r*r。#include <bits/stdc++.h>using namespace std;const double PI = 2*acos(0.0); int main(void) { int T, cas=1; scanf("%d", &T); while (原创 2017-10-21 10:29:12 · 268 阅读 · 0 评论 -
LightOj-1023-Discovering Permutations
题目传送门题意:输出A-Z里面前N个字母的全排列的前K个。思路:使用next_permutation()函数。#include <bits/stdc++.h>using namespace std;int main(void) { int T,cas=1; scanf("%d", &T); while (T--) { int n, k;原创 2017-10-21 10:31:10 · 281 阅读 · 0 评论 -
LightOj-1024-Eid
题目传送门题意:求N个数的最小公倍数。思路:结果比较大,需要用大整数去写。#include <bits/stdc++.h>using namespace std;struct bigInt{ int num[2000], len; void clear() { len=0; memset(num, 0, sizeof(num)); }原创 2017-10-21 10:33:27 · 263 阅读 · 0 评论 -
LightOj-1028-Trailing Zeroes (I)
题目传送门题意:给定一个N,求有多少种进制表示N存在后导0。比如2的二进制为10。思路:求N有多少个因子。#include <bits/stdc++.h>using namespace std;long long num[100000]; int book[1000100]; int len; void init() { num[0] = 1; memset(book,0,sizeo原创 2017-10-21 10:38:00 · 241 阅读 · 0 评论 -
LightOj-1029-Civil and Evil Engineer
题目传送门题意:给定一个无向图,求他的最小生成树与最大生成树的平均值。思路:用Kruskal正着求最小生成树,再倒着求最大生成树。#include <bits/stdc++.h>using namespace std;struct node{ int x, y, w; }edge[30000]; int cnt; int n; int fa[15000]; int cmp1(node a,原创 2017-10-21 10:41:01 · 256 阅读 · 0 评论 -
LightOj-1030-Discovering Gold
题目传送门题意:有一个六面体骰子,每投一次就往前走多少格,并可以获得格子上的金币,求走到最后可以获得的金币数的期望。思路:当前点的期望P[i] = A[i]+(P[i-1]+P[i-2]+P[i-3]+P[i-4]+P[i-5]+P[i-6])/6,如果不够六格, 则为P[i] = A[i]+(P[i-1]+P[i-2]+P[i-3]+…+P[i-n])/n。#include <bits/stdc+原创 2017-10-21 10:47:08 · 377 阅读 · 0 评论 -
LightOJ-1014-Ifter Party
题目传送门题意:给定两个数p,l,求所有x,使p%x==l。思路:注意l>x。#include <bits/stdc++.h>using namespace std;int ans[10100]; int main(void) { int T, cas=1; scanf("%d", &T); while (T--) { int p, l, num =原创 2017-09-06 21:32:25 · 278 阅读 · 0 评论 -
LightOJ-1013-Love Calculator [LCS][DP]
题目传送门题意:给定两个字符串,求构造一个字符串包含这两个字符串,求最短的构造字符串和不同构造字符串的数量。思路:dp[x][y]数组表示从a[1]~a[x],b[1]~b[y]所能构造的最短字符串的长度,ans[x][y]表示a[1]~a[x],b[1]~b[y]所能构造的字符串的数量。#include <bits/stdc++.h>using namespace std;int main(voi原创 2017-09-06 21:29:03 · 314 阅读 · 0 评论 -
LightOJ-1012-Guilty Prince [DFS]
题目传送门题意:给定一个迷宫,求与’@’相连的面积一共有多大。思路:红黑砖问题,直接从’@’处DFS并记录个数。#include <bits/stdc++.h>using namespace std;char mp[30][30]; int cnt, n, m; int next[4][2] = {1,0,-1,0,0,1,0,-1}; void dfs(int x, int y) { cn原创 2017-08-28 16:03:36 · 353 阅读 · 0 评论 -
LightOJ-1001-Opposite Task
题目传送门题意:输入T组数据,每组数据一个数,将这个数字分解成两个数字之和,要求这两个数字范围为[0,10]。#include <bits/stdc++.h> using namespace std;int main(void) { int T; scanf("%d", &T); while (T--) { int n; scanf("原创 2017-08-27 19:58:43 · 298 阅读 · 0 评论 -
LightOJ-1002-Country Roads [最短路][Dijkstra]
题目传送门题意:给定无向图,求一个城市t到其他城市的最低成本,成本的定义为路径中的最大消费。思路:这个题跟POJ-2253-Frogger类似,可以用Dijkstra算法变形来写。也可以用kruskal来写。#include <bits/stdc++.h>using namespace std;int n, m; int mp[550][550]; const int INF = 0x3f3f3f3原创 2017-08-27 20:03:41 · 306 阅读 · 0 评论 -
LightOJ-1003-Drunk [拓扑排序]
题目传送门题意:给定一些酒和一些顺序,如果想喝B酒必须先喝A酒。问可不可以喝完所有的酒。思路:拓扑排序,用map存出现过的字符串。#include <bits/stdc++.h> using namespace std; int head[21000],ans; int book[21000],m; struct node{ int next; int to; }edge[21000原创 2017-08-27 20:08:47 · 262 阅读 · 0 评论 -
LightOJ-1004-Monkey Banana Problem [DP]
题目传送门题意:给定一个菱形的阵列,每次只能向左下或者右下移动,问从最上边走到最下边数字之和最大为多大。思路:DP,可以分解成两个数塔。#include <bits/stdc++.h>using namespace std;int dp[210][210]; int main(void) { int T, N, cas=1; scanf("%d", &T); while (T原创 2017-08-27 20:12:26 · 282 阅读 · 0 评论 -
LightOJ-1005-Rooks [组合数学]
题目传送门题意:N*N的棋盘放K个车,一个车所在的行列不能有第二个车,求有多少种放法。思路:简单组合数学,如果K>N则不可能放下。K<=N有C(N,K)*C(N,K)*K!表示从N行中选K行,从N列中选K列,然后全排列。#include <bits/stdc++.h>using namespace std;long long C[40][40]; void init () { for (in原创 2017-08-27 20:37:42 · 238 阅读 · 0 评论 -
LightOJ-1006-Hex-a-bonacci
题目传送门题意:对递归函数进行优化。思路:易知此递归函数为一递推式,即数组第K个数为第K-6个数到第K-1个数之和,可以用循环写。#include <bits/stdc++.h>using namespace std;const int mod = 10000007; int f[10000+1000]; int main(void) { int T, cas = 1; scanf(原创 2017-08-27 20:40:07 · 273 阅读 · 0 评论 -
LightOJ-1007-Mathematically Hard [欧拉函数]
题目传送门题意:求下从a到b的所有数的欧拉函数的平方和。欧拉函数:小于n的与n互质的数的个数。思路:预处理筛选,求前缀和。#include <bits/stdc++.h>using namespace std;unsigned long long ans[5000100]; void init() { ans[0] = 0; ans[1] = 1; for (int i =原创 2017-08-28 15:38:05 · 245 阅读 · 0 评论 -
LightOJ-1009-Back to Underworld [二分图染色]
题目传送门题意:给定n种对立关系,求一方的人最多有多少个。思路:二分图染色问题。如果当前节点为一种颜色,则与之相连节点全部都为另一种颜色。统计两个颜色个数,取最大值。#include <bits/stdc++.h>using namespace std;struct node{ int to, next; }edge[201000]; int head[100000+1000], cnt;原创 2017-08-28 15:49:48 · 329 阅读 · 0 评论 -
LightOJ-1008-Fibsieve`s Fantabulous Birthday [规律]
题目传送门题意:给定一个图表,求第n个数的坐标。思路:规律题,1 * 1的方阵最外层为1,2 * 2的方阵最外层为[2,4], 3 * 3的方阵最外层为[5,9],可知n*n的方阵最外层为[(n-1)^2+1,n^2]。可求出第N个数所在的最大方阵的行数和列数,根据行数的奇偶判断是先行后列还是先列后行增加,然后根据N与对角线的比较得到行号列号,#include <bits/stdc++.h>usin原创 2017-08-28 15:46:06 · 317 阅读 · 0 评论 -
LightOJ-1010-Knights in Chessboard [规律]
题目传送门题意:象棋中马是走日字形,问在m*n的棋盘中最多可以放多少个马,使他们不能互相攻击。思路:规律题。 - 如果只有一行或者一列,则所有的棋盘均可以放马。 - 如果有两行或者两列,则一个田字型可以放2*2个马,然后空出一个田字型。 - 其他情况则可以放总面积的一半。#include <bits/stdc++.h>using namespace std;int main(void) {原创 2017-08-28 15:56:42 · 400 阅读 · 0 评论 -
LightOJ-1011-Marriage Ceremonies [状态压缩][DP]
题目传送门题意:给n对男女两两之间的好感度,求将他们所有两两结合起来得到的最大好感度。思路:状压DP,dp[i][j]表示选前i个人的j种选法的最大好感度。#include <bits/stdc++.h>using namespace std;int dp[20][70000]; int a[20][20]; int main(void) { int T, cas=1; scanf(原创 2017-08-28 15:59:52 · 319 阅读 · 0 评论 -
LightOJ-1033-Generating Palindromes
题目传送门题意:求这个字符串最少添加几个字符可以成为一个回文串。思路:动态规划, dp[i][j]表示第i个字符到第j个字符最少添加的字符数使其成为回文串。#include <bits/stdc++.h>using namespace std;int main(void) { int T, cas=1; scanf("%d", &T); while (T--) {原创 2017-10-21 10:50:27 · 288 阅读 · 0 评论