03 2014 档案

摘要:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2085A.囧Time Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 80 (40 users)Total Accepted: 34 (34 users)Special Judge: NoDescriptionDS最近很囧,总是不能把妹子哄开心。所以,邪恶的他也想让你们囧一囧。他给你一个数字 n 让你输出囧字的迭代(详见样例)。 Input第一行一个整数,代表数据的组数。 每组数据一 阅读全文
posted @ 2014-03-30 15:02 galaxy77 阅读(513) 评论(0) 推荐(0)
摘要:【题意】根据一个排列,按照字典排列的顺序输出它的下面k个排列。 用C++的STL库的next_permutation()函数直接生成下一个排列 就可以了 3 2 1 的下一个排列会是 1 2 3#include#include#include#includeusing namespace std;int p[1111];int main(){ int t,n,k; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); for(int i=0;i<n;i++) scanf(... 阅读全文
posted @ 2014-03-30 13:34 galaxy77 阅读(243) 评论(0) 推荐(0)
摘要:问题描述有n个格子,从左到右放成一排,编号为1-n。共有m次操作,有3种操作类型:1.修改一个格子的权值,2.求连续一段格子权值和,3.求连续一段格子的最大值。对于每个2、3操作输出你所求出的结果。输入格式第一行2个整数n,m。接下来一行n个整数表示n个格子的初始权值。接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x,y]内格子最大的权值。输出格式有若干行,行数等于p=2或3的操作总数。每行1个整数,对应了每个p=2或3操作的结果。样例输入4 31 2 3 42 1 31 4 33 1 4样例 阅读全文
posted @ 2014-03-20 21:00 galaxy77 阅读(379) 评论(0) 推荐(0)
摘要:问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式 输入一行,包含一个正整数n。输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行。样例输入52样例输出899998989989998899数据规模和约定1#include#include#includeusing namespace std;int n;int a[10];void dfs(int step){ if(step==3) { int ans; ans=(a[0]... 阅读全文
posted @ 2014-03-20 13:16 galaxy77 阅读(178) 评论(0) 推荐(0)
摘要:问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1#include#include#includeusing namespace std;char s[1000002];int d[100];int get(char x){ if(x>='0'&&x='a'&&x='A'&&x=0; i--) { sum+=get(s[i])*f; f*=16; } int flag=0; if(sum) { pri... 阅读全文
posted @ 2014-03-20 12:46 galaxy77 阅读(411) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2058【题意】给出n 和m , 输出 从1。。。n 的n个数字中 相加为m的子区间段【思路】这里就是一个等差序列 用公式 sn=a1*n + (n-1)*n/2 已知sn枚举长度就可以算出 a1了 式子变形算出的a1是整数就可以直接输出结果了在这里我貌似想多了 因为算出的结果是一个double型 直接强制类型转化为int型 要是 1.999999 不就转化为了 1 而不是2了 所以这里我又分了两种情况考虑 但是提交上去时有一个地方写错了 使得没有进入第二个分支的情况 这样也ac了难道这些都不用考虑的吗记录几个 阅读全文
posted @ 2014-03-19 16:30 galaxy77 阅读(182) 评论(0) 推荐(0)
摘要:这题可以直接用十六进制输入,然后进行十六进制的运算(其实不管是什么进制,在计算机中都是以二进制来计算的,只是按输入输出的格式不同,而强制转化为其它的进制),就像十进制的加法一样。这里要注意的是输入小于15位,结果超过了二进制中的32位而小于64位。所以这里用__int64的类型。输入输入出格式就是(%I64x,%I64X)。由于%I64X,不能输出负数,所以负数的输出要做处理。 1 #include 2 3 int main(){ 4 __int64 a,b; 5 int flag; 6 while(~scanf("%I64X%I64X",&a,&b)) / 阅读全文
posted @ 2014-03-19 15:32 galaxy77 阅读(239) 评论(0) 推荐(0)
摘要:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11444【题意】给一张无向图 求从点0到点n-1 花费的最少时间 每条路径有一段开放的时间 每天只有在这段时间汽车才能开上这条路 汽车从中午( 即第720分钟 )开始走 一开始车里的电可以走4小时 每到一个点可以充电 充两分钟可以走一分钟【只过了 测试数据 代码先贴在这里】#include#include#include#include#include#include#include#define maxx 100000000using namespace 阅读全文
posted @ 2014-03-18 19:17 galaxy77 阅读(190) 评论(0) 推荐(0)
摘要:ce了这么多次居然都没发现交错语言了 嗷嗷啊~~!@#¥%……&*【题意】给一张有向图 求从s点出发到t点话费的最少时间 每段路都有一个开放的时间和一个关闭是时间只要在走那一段路的时候 判断一下要等待多长时间 就行了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define maxx 100000000 9 10 using namespace std;11 struct node{int t;int a;int b;int w;};12 vector g[1002];1 阅读全文
posted @ 2014-03-18 11:12 galaxy77 阅读(196) 评论(0) 推荐(0)
摘要:poj 2234Matches Gamehttp://poj.org/problem?id=2234 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int main() 7 { 8 int i,j,n,m,t; 9 while(~scanf("%d",&n))10 {11 int ans=0;12 for(int i=0;i 2 #include 3 #include 4 using namespace std; 5 bool vis[1002]; 6 int s... 阅读全文
posted @ 2014-03-12 21:26 galaxy77 阅读(149) 评论(0) 推荐(0)
摘要:http://lx.lanqiao.org/problem.page?gpid=T42【细心一点~】历届试题 九宫重排 时间限制:1.0s 内存限制:256.0MB问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。输... 阅读全文
posted @ 2014-03-11 15:08 galaxy77 阅读(999) 评论(0) 推荐(1)
摘要:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1356【题意】: 给一张无向图 一个人从某一点开始走 判断是否 有一时刻他可以在图里的任意一点上【思路】:只要看图中是否有奇圈 有的话就可以 没有就不行 ()#include#include#include#include#include#includeusing namespace std;vector g[100002];int vis[100002],ans;void find1(int u,int x,int f){ if(vis[u]!=-1) { if(vi... 阅读全文
posted @ 2014-03-10 13:17 galaxy77 阅读(225) 评论(0) 推荐(0)
摘要:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1364【题意】:把n分为 均分为m 段 每段n/m个数字 每段可以选一个最大的数 求这些数相加起来>k 的最小的m一开始的 rmq+二分的想法是错误的 因为并不是分的越多的段数 得到的 结果就会越大例如 1 2 9 9 2 2 分成两份得到的结果比分成三段的更大 所以分成的段数与结果之间不存在单调性 不能用二分不能用二分只能 将段数由小到大枚举 但是这里有一个 技巧 可以很大的缩短时间:当分成i段得到的段长L1 与 之前分成 i-1段得到的段长相同 那就只要把前一次的结果再加上这一次 第i 阅读全文
posted @ 2014-03-09 20:48 galaxy77 阅读(269) 评论(0) 推荐(0)
摘要:(a - b) mod p = ((a mod p - b mod p) + p) mod p(a / b) mod p = ((a mod p) * (b^(-1) mod p)) mod p相对比较简易的小数取余方法:用被除数减去除数,然后用这个结果再减去除数,一直减,直到获得的结果小于除数,此时的结果即为取余后的结果public static void main(String args[]){double x = 64.5;double y = 6.0; System.out.println(x/y + " " + x%y);}显示:10.75,4.5分解下取余部分: 阅读全文
posted @ 2014-03-09 20:28 galaxy77 阅读(158) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4570【题意】: 给出一个长度为n的数列,将其分成若干段,要求最小,其中ai是每一段数列的第一项,bi是每一段的长度,l为将数列分成l段。 题意是百度的 为什么没有人 说 分为同一段的数 要 2 #include 3 #include 4 5 #include 6 #define INF 0x1f1f1f1f 7 using namespace std; 8 9 __int64 d[102],a[102],b[102];10 11 __int64 min(__int64 a,__int64 b... 阅读全文
posted @ 2014-03-06 20:16 galaxy77 阅读(218) 评论(0) 推荐(0)
摘要:【题意】:给出一棵树, 每条边有一个权值 求离每个节点最远的点的权值和看这篇题解学会的 http://tech.ddvip.com/2013-09/1379006959202653.html树形dp也蛮有趣的 ^ ^ 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 struct node{int v;int w;}; 9 10 vectorno[10002]; 11 __int64 ff[10002][2]; 12 bool vis[10002]; 1... 阅读全文
posted @ 2014-03-05 18:03 galaxy77 阅读(129) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 vector g[6002]; 9 int w[6002],d[6002][2];10 11 __int64 dfs(int i,int j,int f)12 {13 if(d[i][j]!=-1) // 注意要记录 不然会超时14 {15 return d[i][j];16 }17 __int64 ans=0; //点i 不在 一定合法18 19 ... 阅读全文
posted @ 2014-03-04 21:12 galaxy77 阅读(223) 评论(0) 推荐(0)
摘要:#include #include#include #includeusing namespace std;int sg[10002],a[10002];bool vis[10002];void getsg(int k){ sg[0]=0; for(int i=1;i<=10000;i++) { memset(vis,false,sizeof(vis)); for(int j=0;a[j]<=i&&j<k;j++) vis[sg[i-a[j]]]=true; for(int j=0;j<=10000;j++) ... 阅读全文
posted @ 2014-03-04 16:59 galaxy77 阅读(224) 评论(0) 推荐(0)
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 int dp[1002][26]; 6 int n,k; 7 int main() 8 { 9 while(scanf("%d%d",&n,&k)>0)10 {11 memset(dp,0,sizeof(dp));12 //dp[1][25]=1;13 dp[0][25]=1;14 for(int i=1; i=0; m--)18 {19 20 ... 阅读全文
posted @ 2014-03-04 14:06 galaxy77 阅读(264) 评论(0) 推荐(0)