摘要:
题目链接题意 : 给你一个a进制的数串s,让你转化成b进制的输出。A = 10, B = 11, ..., Z = 35, a = 36, b = 37, ..., z = 61,0到9还是原来的含义。思路 : 这个题因为牵扯了英文字母所以比较复杂一点,先将所有出现的英文字母转化成他们所代表的数,然后进行进制转换。 1 //POJ 1220 2 #include 3 #include 4 #include 5 #include 6 7 using namespace std ; 8 9 int i,l,k,a,b,T,t[555],A[555] ;10 char s[555],d[... 阅读全文
摘要:
点我看题目A. Mashmokh and Lightstime limit per test:1 secondmemory limit per test:256 megabytesinput:standard inputoutput:standard outputMashmokh works in a factory. At the end of each day he must turn off all of the lights.The lights on the factory are indexed from1ton. There arenbuttons in Mashmokh' 阅读全文
摘要:
点我看题目题意 : 给你一个n*n的矩阵,让你找一个子矩阵要求和最大。思路 : 这个题都看了好多天了,一直不会做,今天娅楠美女给讲了,要转化成一维的,也就是说每一列存的是前几列的和,也就是说0 -2 -7 0 9 2 -6 2-4 1 -4 1-1 8 0 -2处理后就是:0 -2 -9 -99 11 5 7-4 -3 -7 -6-1 7 7 5 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 int sum[110][110] ; 8 int main() 9 {10 int n ,m;11 ... 阅读全文
摘要:
点我看题目题意 : 中文题不详述。思路 : 设经过s步后两青蛙相遇,则必满足(x+m*s)-(y+n*s) = K*L(k = 0,1,2....)变形得:(n-m)*s+K*L = x-y ;另a = n-m,b = L,c = x-y,则上式变为a*s+b*k = c。于是就变成了扩展欧几里德,求解不定方程,线性同余方程。只要上式存在整数解,则这两个青蛙能相遇,否则不能。 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std ; 7 8 #define LL long long 9 10 LL g... 阅读全文
摘要:
点我看题目题意 : K进制的N位数,不能有前导零,这N位数不能有连续的两个0在里边,问满足上述条件的数有多少个。思路 : ch[i]代表着K进制的 i 位数,不含两个连续的0的个数。当第 i 位为0时,那么第i-1位不为0有(K-1)种放法,(k-1)*f[i-2]当第 i-1 位为0时,第 i 位有(k-1)种放法,(k-1)*f[i-1] 1 #include 2 int main() 3 { 4 long long ch[101]; 5 int m,n; 6 while(~scanf("%d %d",&m,&n)) 7 { 8 int i... 阅读全文
摘要:
点我看题目题意 : 冒泡排序的原理众所周知,需要扫描很多遍。而现在是求1到n的各种排列中,需要扫描k遍就变为有序的数列的个数,结果模20100713,当然了,只要数列有序就扫描结束,不需要像真正的冒泡排序要扫描n-1遍。思路 : 这个题的结果是K!((K + 1) ^ (N - K) - K ^ (N - K))。需要用到逆序数,此题具体推导。 1 //POJ 3761 2 #include 3 #include 4 #include 5 6 using namespace std; 7 const __int64 mod = 20100713LL ; 8 __int64 factor... 阅读全文
摘要:
点我看题目题意 : 中文题不详述。思路 : 根据题目描述及样例可以看出来,如果你第一个城市选的是生活费减花费大于等于0的时候才可以,最好是多余的,这样接下来的就算是花超了(一定限度内的花超),也可以通过前边的剩余来补充进去,就可以多玩一个。所以先存一下每个城市的生活费减去花费的剩余,然后从非负开始找,找一个数组存一下现在还剩下的多余花费,还要在找一个数组存一下当前点用的天数,可以从头开始重新选择新的城市。 1 //HDU 1422 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int a[200010] ; 8 ... 阅读全文
摘要:
点我看题目题意 : 中文题不详述。思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所求。//HDU 1203#include #include using namespace std ;struct node{ int a ; double b ;}p[101000] ;double dp[10100] ;int main(){ int n,m ; while(~scanf("%d %d",&n,&m)) { if(n == 0 && 阅读全文
摘要:
点我看题目题意 :给你一串由1和0组成的长度为n的数串a1,a2,a3,a4.....an,定义一个操作为AdjBC(a) = a1*a2+a2*a3+a3*a4+....+an-1*an。输入两个数m和k,要求输出满足长度为m的数串进行上述操作能够得到的结果为k的个数。思路 : 典型DP,列出状态转移方程就行了。dp[i][j][0]代表长度前 i 的数串和为 j 并且当前位置为0.dp[i][j][1]=dp[i-1][j][0]+dp[i-1][j-1][1];dp[i][j][0]=dp[i-1][j][1]+dp[i-1][j][0];#include #include #inclu 阅读全文
摘要:
点我看题目题意 : 其实我也说不太清楚题意,就是给你很多方块,每放一块方块,都要和前一块有一个面相接,如果不相接,就输出NO,并输出是第几个方块不相接的。如果满足每一个都和前边相接,那就判断所有没有与其他方块相接的面的个数。思路 : 每输入一个就判断前一个的上下左右前后中距离为1的有没有这个点,如果没有就记录下位置,用于输出NO,如果有的话,就记录下来,然后减去两个面,因为两个方块相接,有两个面要被减去,ans先初始化为6*m,相当于先初始化为所有的面。#include #include #include #include #include using namespace std ;//int 阅读全文