摘要:
此题比赛时没有好的方法不会做,最后从别人那里学到了一个好的方法,就是从小到大慢慢数,从11到99开始数数,直到l < 100...1 < r < 9000..9当加到这一步时,输出count就是所求结果,比如 47 1024 首先是两位数的 11 到99 ,47在里面,此时数目是5,再到三位数,101 到 999,此时1024大于他们数目count直接加上9*10(101 到191共10个),接着是四位数,1001 到 9999 ,1024在里面,此事要计算1001到1024首尾相同的数的个数,总共有3个,所以总数就是98个。View Code 1 #include<c 阅读全文
摘要:
题意叫你求交叉点的个数,转换一下思维,把第一个数看作是i,和它相连接的第二个数看作是ai,当i < j 且 ai > aj时这时才有交叉点,这样就转换为求逆序对的个数;首先,把他x从小到大排序,x相同的按y从大到小排序,排完序后,在使用合并排序,计算逆序对的个数。View Code 1 #include<stdio.h>//从网上搜的都是用树状数组解的,这个我暂时还不会,等以后学了在看吧。 2 #include<stdlib.h> 3 #define MAX 1000005 4 5 typedef struct NODE 6 { 7 int x,y; 8 } 阅读全文
摘要:
View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 500000 5 6 int a[N],b[N]; 7 long long count; 8 void mergearray(int a[], int first, int mid, int last, int temp[]) 9 { 10 int i = first, j = mid + 1; 11 int m = mid, n = last; 12 int k = 0; 13 ... 阅读全文
摘要:
题目叙述的有问题,咒语应该是以b开头m结尾的,一开始看题意就是看不懂,搜了别人的代码,才发现题意的坑了,在网上看到了了别的解法貌似构图Floyd算法,不过只是要拿此题练习DFS仅此而已。思路:先找到以b开头的单词在开始搜索,寻找首位相连的单词,输出的时候容易错,有点坑爹。View Code 1 #include<cstdio> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #define N 1001 6 7 using namespace std; 8 9 stru 阅读全文
摘要:
一开始被数据规模下到了,后来看了别人的思路,恍然大悟,可以先写普通的程序将每个数打印出来,最后再打表输出。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int fan(int n) 5 { 6 int i,ans=1; 7 for(i=1; i<=n; i++) 8 { 9 ans = ans*i;10 }11 return ans;12 } 13 14 int main()15 {16 int i,j,ncases,t,m,n;17 int sum... 阅读全文
摘要:
View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 以前用BFS写过,这次改用DFS写发现DFS掌握的不好,挑了好久才过,今下午才AC了两道题,还要加紧练习DFS! 5 int row,col,count,vis[21][21]; 6 char map[21][21]; 7 int dx[] = {0,0,-1,1}; 8 int dy[] = {1,-1,0,0}; 9 void DFS(int x,int y)10 {11 int sx,sy,i;12 vis 阅读全文
摘要:
View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 从第一种开始搜索,搜索完毕后回溯,搜索下一个 4 int n,m,count,sum,val[11],num[11]; 5 void DFS(int x) 6 { 7 int i; 8 if(sum == n) 9 {10 count++; 11 return ;12 }13 if(sum > n || x > m) 14 return ; 15 for(i=1; i<=num[x]... 阅读全文
摘要:
思路很简单,一开始没有用优先队列,WA了几次后来改了,想一想走迷宫停顿时应该用优先队列。if(u.btime==1) continue;此句不能省略当时间为1时,这一步无法出去,只有重新来过View Code 1 #include<cstdio> 2 #include<cstdlib> 3 #include<iostream> 4 #include<cstring> 5 #include<queue> 6 7 using namespace std; 8 int N,M,map[10][10]; 9 int dx[] = {0,0,- 阅读全文
摘要:
View Code 1 #include<stdio.h> 2 #include<stdlib.h>//回溯法运用。模拟汉诺塔过程 3 4 int flag; 5 void hanor(int n,int *a,int *b,int *c) 6 { 7 int i; 8 if(!flag) 9 return ;10 if(n == 0)11 {12 flag = 1;13 return ;14 } 15 if(n == b[1])16 {17 f... 阅读全文
摘要:
View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 char s1[1001],s2[1001]; 6 int cmp (const void *a,const void *b) 7 { 8 if( *(char*)a < *(char *)b ) 9 return 1;10 return -1;11 }12 13 int main()14 {15 int i,j,k,len;16 17 while(scanf("%s",s1)... 阅读全文