训练指南(刘汝佳)
溺水行舟
这个作者很懒,什么都没留下…
展开
-
uva 11609(组合)
此题运用快速幂和组合公式对于选人的方案可以是:∑C(n,k)C(k,1) 其中k从1到n 所有组合数相加。对于C的公式有:C(n,k)C(k,r)=C(n,r)C(n-r,k-r)(k>=r)化简后 C(n,1)C(n-1,k-1)其中C(n,1)是常数n提出来,那么里面就是∑C(n-1,k-1)其中k从1 到n 那么这个就是组合公式的全集 也就是2^(n-1)所以原创 2013-04-28 21:32:50 · 1366 阅读 · 0 评论 -
UVA 11388 GCD LCM (数论)
纯一个SB题,要最小的,那输进去,输出来就行。#include using namespace std;int main(int argc, char *argv[]){ long long G,L,t; cin>>t; while(t--) { cin>>G>>L; if(L%G) cout<<-1<<endl; else cout<<G<<" "<<L<<endl原创 2013-04-03 22:09:10 · 981 阅读 · 0 评论 -
Uva 11552 Fewest Flops (三维动态规划)
dp[l][i][j] 表示第l个分组以第i个字母组开头以第j个字母组结尾时候最小划分的块数n=strlen(S)/kdp[l][i][j] 的值分两种情况:1.头i在第l-1组中在位置h找到了,说明头尾可以相接,那么遍历l-1组中以h结尾的所有值,求得最小值temp:dp[l][i][j]=temp+strlen(ss[l])-1;2.没找到,那么遍历l-1组中的所有值,求得原创 2013-04-03 20:54:01 · 1386 阅读 · 0 评论 -
UVA 11076 Add Again(重复元素排列)
这题我用long long 死活过不去。看了别人的结题报告才知道要这样输出:coutunsigned long long的范围比long long的要大,题目后面也说了要用unsigned 64位,只是自己没看而已。这题看几个例子就知道,每结果的每一位都是若干个输入的元素的和,只是每个元素多少个而已。 例如: 输入: 52 2 2 3 4有三种元素,以及每种的个数:原创 2013-04-28 20:24:52 · 1886 阅读 · 0 评论 -
uva 11461(水题)
#include #include using namespace std;int main(int argc, char *argv[]){ int a,b,count,i,t; while(cin>>a>>b&&(a+b)) { for(count=0,i=a;i<=b;i++) { t=sqrt((double)i); if(t*t==i) count++;原创 2013-04-28 20:42:12 · 1092 阅读 · 0 评论 -
UVA 10827(环面上最大和,矩阵最大和变)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=17681 -1 0 0 -4 1 -1 0 0 -4 1 -1 0 0 -42 3 -2 -3 2 2 3 -2 -3 2 2 3 -2 -3 2原创 2013-08-17 10:21:25 · 1627 阅读 · 0 评论 -
UVA 11889 Benefit(公约公倍)
#include using namespace std;int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(int argc, char *argv[]){ long long a,L,t,i; cin>>t; while(t--) { cin>>a>>L; if(L%a) cout<<"NO SOLUTI原创 2013-04-03 22:39:36 · 1923 阅读 · 0 评论 -
Uva11905 连数问题(贪心)
#include #include #include#includeusing namespace std;struct cha{ string a; }d[55];int cmp(cha A,cha B) //用字符串比较函数直接比较不行的,例如563,56 { string c,d; c=A.a+B.a;d=B.a+A.a; return c>d;}int原创 2012-11-21 22:21:20 · 1412 阅读 · 0 评论 -
Uva 10340 all in all (字符串匹配)
#include #include using namespace std;int main(int argc, char *argv[]){ string a,b; int i,j,flag; while(cin>>a>>b) { for(flag=j=i=0;i<a.length();i++) { while(a[i]!=b[j]) { j++;原创 2012-11-22 13:14:16 · 921 阅读 · 0 评论 -
poj 2159 古老的密码(字符串)
#include#include#includeusing namespace std;int main(){ char s1[105],s2[105]; int i,j; while(cin>>s1>>s2) {if(strlen(s1)!=strlen(s2)) {cout<<"NO"<<endl;continue;} int a[26]={0},b[26]={0};原创 2012-11-21 22:50:07 · 1732 阅读 · 0 评论 -
Uva 11039(排序+模拟)
#include #include #include using namespace std;int a[500005],b[500005]; int i,j,n,an,bn,x,t;int work(int flag){ int ans=1; i=j=0; while (i<an&&j<bn) { if (flag) {原创 2012-11-21 20:36:26 · 1532 阅读 · 1 评论 -
poj 3497 or hdu 2333
//方法1:#include #include #include #include #include #include using namespace std;struct compute{ int zl,jg,pz;}d[1005];int init[1005],n,w,Count;map ma;int cmp(compute a,compute b){ retur原创 2012-11-18 11:01:46 · 1462 阅读 · 0 评论 -
Uva 11520填充正方形
#include using namespace std;char map[15][15];int n;char min_A(int i,int j){ char a='A'; int flag=1; while(flag) { flag=0; if(i>0&&map[i-1][j]==a) {flag=1;a++;} if(i+1<n&&map[i+1][j]==a)原创 2012-11-18 13:41:39 · 1009 阅读 · 0 评论 -
poj 3122 pie(二分搜索)
#include #include using namespace std;const double PI=acos(-1.0); //3.14过不了 double area[10005];double max_area;int n,f;int OK(double k){ int i,Count=0; for(i=0;i<n;i++) Count+=floor(area[i]原创 2012-11-18 13:02:48 · 914 阅读 · 0 评论 -
Uva 10795 A Different Task
#include #include using namespace std;long long f(int temp[],int i,int aim){ if(!i) return 0; /*刚好i就在aim上i就不用移动,否则先把i上面的i-1个移到中转上, 在把i移到aim上(1次),最后把i-1个全部移到aim上:((1<<(i-1))-1)次 */ if(temp[i原创 2012-11-17 17:42:47 · 1261 阅读 · 0 评论 -
Poj 3154(LA 3708)
#include #include #include using namespace std;int main(int argc, char *argv[]){ int i,n,m; double ans; while(cin>>n>>m) { for(ans=0,i=1;i<n;i++) { double tt=(double)i/n*(m+n); ans+原创 2012-11-17 22:26:01 · 1168 阅读 · 0 评论 -
zoj 3132 DNA Consensus String(字符串处理)
#include #include using namespace std;struct DNA{ int a,c,g,t;}d[1005];int main(int argc, char *argv[]){ int t,n,m,i,j,ans,max; char s[1005]; cin>>t; while(t--) { scanf("%d%d",&n,&m);原创 2012-11-22 12:32:09 · 1255 阅读 · 0 评论 -
Uva 10970 大块巧克力(记忆式递归or规律)
//记忆式递归 #include #include using namespace std;int d[305][305];int f(int i,int j){ if(d[i][j]!=-1) return d[i][j]; if(i==1) return d[i][j]=j-1; if(j==1) return d[i][j]=i-1; if(i%2==0) return原创 2012-11-22 12:50:06 · 1516 阅读 · 1 评论 -
Uva 10382(nyist 12喷水装置二)
#include using namespace std;#include#include struct point{ float l,r;}p[10005];int main(int argc, char *argv[]){ float w,h,s,x1,x,r,x2; int i,n,ans; while (scanf("%d%f%f",&n,&原创 2012-11-23 18:02:32 · 1364 阅读 · 0 评论 -
Uva 11134 Fabled Rooks(平面区间选点)
由于它是平面选点,可以将它确定矩形的对角坐标x1,y1,x2,y2,,拆成x轴坐标x1,y1 和y轴坐标x2,y2;然后分别对x轴和y轴区间选点,只要两个都可以选完,那就说明在它确定的平面上也是可以选出的。需注意输出时还要还原顺序输出。import java.util.*;class weizhi implements Comparable{ int x,y,id; public原创 2013-03-30 11:16:48 · 1080 阅读 · 0 评论 -
Uva 11054 洒交易(扫描法)
import java.util.*;import java.math.*;public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); long n,a[]=new long[100005],sum; int i; while(in.hasNe原创 2013-03-29 17:28:25 · 978 阅读 · 0 评论 -
Uva 10891 Game of Sum(二维动规)
枚举剩下的序列即可: f(i,j)表示从i到j玩家一取得的最大值,sum[i][j]表示从i到j的和。 f(i,j)=sum[i][j]-min(f(i,k),f(k+1,j),0) i#include #include using namespace std;int a[105],n,sum[105],bz[105][105],d[105][105];int so原创 2013-01-26 14:01:39 · 1291 阅读 · 0 评论 -
LA 3177 长城守卫(推理+二分)
训练指南书上推理是对的,但书上代码个人觉得是有问题的,但却能够AC,真是不解。#include using namespace std;int a[100005],elft[2],rig[2],n;int OK(int ans){ int x=a[1],y=ans-a[1],id=0,i; elft[0]=x; rig[0]=0; for(i=2;i<=n;i++)原创 2013-01-25 21:20:39 · 1930 阅读 · 0 评论 -
Uva 10635 王子和公主(LCS转LIS+二分)
#include #include #include using namespace std;int n,m,a[62505],b[62505],d[62505];int binary(int left,int right,int key){ while(left<right) { int mid=(left+right)>>1; if(d[mid]>原创 2013-01-26 15:00:25 · 1363 阅读 · 0 评论 -
Uva 11549(计算机谜题)(模拟)
#include #include using namespace std;int pow(int n,long long k){ int a[100],c,s,i=0,j; if(k==0) return 0; k=k*k; while(k) { a[i++]=k%10; k/=10; } if(n>i) n=i; //如果不够长度,有多少位给多少 c=0; f原创 2012-11-26 22:14:11 · 1107 阅读 · 0 评论