2014 Multi-University Training Contest 6
官方解题报告:http://blog.sina.com.cn/s/blog_a19ad7a10102uz2v.html
Apple Tree http://acm.hdu.edu.cn/showproblem.php?pid=4925
1 #include<cstdio> 2 const int M=100; 3 int a[M][M]; 4 int dx[]={0,0,1,-1}; 5 int dy[]={1,-1,0,0}; 6 int main(){ 7 int t,n,m; 8 while(~scanf("%d",&t)){ 9 while(t--){ 10 scanf("%d%d",&n,&m); 11 for(int i=0;i<n;i++){ 12 for(int j=0;j<m;j++){ 13 a[i][j]=1; 14 } 15 } 16 for(int i=0;i<n;i++){ 17 for(int j=0;j<m;j++){ 18 if((i+j)&1){ 19 a[i][j]=0; 20 for(int k=0;k<4;k++){ 21 int tx=i+dx[k]; 22 int ty=j+dy[k]; 23 if(tx>=0&&tx<n&&ty>=0&&ty<m){ 24 a[tx][ty]<<=1; 25 } 26 } 27 } 28 } 29 } 30 int sum=0; 31 for(int i=0;i<n;i++){ 32 for(int j=0;j<m;j++){ 33 sum+=a[i][j]; 34 } 35 } 36 printf("%d\n",sum); 37 } 38 } 39 return 0; 40 }
Series 1 http://acm.hdu.edu.cn/showproblem.php?pid=4927
1 import java.math.BigInteger; 2 import java.util.Scanner; 3 4 class Main{ 5 public static void main(String args[]){ 6 Scanner cin=new Scanner(System.in); 7 int t,n,a[]=new int[3000]; 8 BigInteger c[]=new BigInteger[3000]; 9 c[0]=BigInteger.ONE; 10 while(cin.hasNext()){ 11 t=cin.nextInt(); 12 while(t-->0){ 13 n=cin.nextInt(); 14 for(int i=0;i<n;i++){ 15 a[i]=cin.nextInt(); 16 } 17 for(int i=1;i<n;i++){ 18 c[i]=c[i-1].multiply(BigInteger.valueOf(n-i)).divide(BigInteger.valueOf(i)); 19 } 20 BigInteger ans=BigInteger.ZERO; 21 for(int i=n-1,odd=1;i>=0;i--,odd^=1){ 22 if(odd%2==1){ 23 ans=ans.add(c[i].multiply(BigInteger.valueOf(a[i]))); 24 } 25 else{ 26 ans=ans.subtract(c[i].multiply(BigInteger.valueOf(a[i]))); 27 } 28 } 29 System.out.println(ans); 30 } 31 } 32 } 33 }
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define mt(a,b) memset(a,b,sizeof(a)) 5 using namespace std; 6 const int M=950; 7 class Hp { //高精度类 8 int len,s[M]; 9 public: 10 void init() { 11 len=1; 12 mt(s,0); 13 } 14 void init(char ch[]) { 15 len=1; 16 mt(s,0); 17 int i=0; 18 while(ch[i]=='0'&&ch[i]!=0) i++; 19 if(ch[i]!=0) { 20 len=strlen(ch)-i; 21 for(i=0; i<len; i++) { 22 s[i]=ch[len-i-1]-48; 23 } 24 } 25 } 26 void init(int x) { 27 len=1; 28 mt(s,0); 29 while(x) { 30 s[len-1]=x%10; 31 x/=10; 32 if(x) len++; 33 } 34 } 35 void init(const Hp& a) { 36 len=a.len; 37 for(int i=0; i<M; i++) { 38 s[i]=a.s[i]; 39 } 40 } 41 void print() { //输出 42 int i=len-1; 43 while(s[i]==0&&i>0) i--; 44 for(; i>=0; i--) { 45 printf("%d",s[i]); 46 } 47 } 48 int cmp(Hp a) { //比较,类似于char数组比较 49 if(len<a.len) return -1; 50 else if(len>a.len) return 1; 51 else { 52 int temp=len-1; 53 while(temp>=0&&s[temp]==a.s[temp]) temp--; 54 if(temp==-1) return 0; 55 else if(s[temp]<a.s[temp]) return -1; 56 else return 1; 57 } 58 } 59 void add(Hp a) { //高精度与高精度相加 60 int templen=max(len,a.len); 61 for(int i=0; i<templen; i++) { 62 s[i]+=a.s[i]; 63 if(s[i]>9) { 64 s[i]-=10; 65 s[i+1]++; 66 } 67 } 68 len=templen; 69 if(s[len]!=0) len++; 70 } 71 void add(int x) { //高精度加单精度 72 int temp=0; 73 s[0]+=x; 74 while(s[temp]>9) { 75 s[temp]-=10; 76 temp++; 77 s[temp]++; 78 } 79 if(s[len]!=0) len++; 80 } 81 void subtract(Hp a) { //高精度减高精度 82 for(int i=0; i<len; i++) { 83 s[i]-=a.s[i]; 84 if(s[i]<0) { 85 s[i]+=10; 86 s[i+1]--; 87 } 88 } 89 while(len>1&&s[len-1]==0) len--; 90 } 91 void multiply10() { //高精度乘10 92 for(int i=len-1; i>=0; i--) { 93 s[i+1]=s[i]; 94 } 95 len++; 96 if(s[len-1]==0) len--; 97 } 98 void multiply(int b) { //高精度乘单精度 99 int temp=0; 100 for(int i=0; i<len; i++) { 101 temp+=s[i]*b; 102 s[i]=temp%10; 103 temp/=10; 104 } 105 s[len++]=temp; 106 while(s[len-1]>10) { 107 s[len]+=s[len-1]/10; 108 s[len-1]%=10; 109 len++; 110 } 111 while(len>1&&s[len-1]==0) len--; 112 } 113 void multiply(Hp b) { //高精度乘高精度 114 Hp c; 115 mt(c.s,0); 116 for(int i=0; i<len; i++) { 117 for(int j=0; j<b.len; j++) { 118 c.s[i+j]+=s[i]*b.s[j]; 119 c.s[i+j+1]+=c.s[i+j]/10; 120 c.s[i+j]%=10; 121 } 122 } 123 len=len+b.len; 124 for(int i=0; i<len; i++) { 125 s[i]=c.s[i]; 126 } 127 while(len>1&&s[len-1]==0) len--; 128 } 129 int divide(int b) { //高精度除单精度 130 int ret=0; 131 for(int i=len-1; i>0; i--) { 132 s[i-1]+=(s[i]%b)*10; 133 s[i]/=b; 134 } 135 ret=s[0]%b; 136 s[0]/=b; 137 while(len>1&&s[len-1]==0) len--; 138 return ret; 139 } 140 Hp divide(Hp b) { //高精度除高精度 141 Hp c,d; 142 mt(c.s,0); 143 mt(d.s,0); 144 d.len=1; 145 for(int i=len-1; i>=0; i--) { 146 d.multiply10(); 147 d.s[0]=s[i]; 148 while(d.cmp(b)>=0) { 149 d.subtract(b); 150 c.s[i]++; 151 } 152 } 153 for(int i=0; i<len; i++) { 154 s[i]=c.s[i]; 155 } 156 while(len>1&&s[len-1]==0) len--; 157 while(d.len>1&&d.s[d.len-1]==0) d.len--; 158 return d; 159 } 160 } c[3000],ans,tmp; 161 int a[3000]; 162 int main(){ 163 int t,n; 164 while(~scanf("%d",&t)){ 165 while(t--){ 166 scanf("%d",&n); 167 for(int i=0;i<n;i++){ 168 scanf("%d",&a[i]); 169 } 170 c[0].init(1); 171 for(int i=1;i<n;i++){ 172 c[i].init(c[i-1]); 173 c[i].multiply(n-i); 174 c[i].divide(i); 175 } 176 for(int i=0;i<n;i++){ 177 c[i].multiply(a[i]); 178 } 179 ans.init(0); 180 tmp.init(0); 181 for(int i=n-1,odd=1;i>=0;i--,odd^=1){ 182 if(odd&1) ans.add(c[i]); 183 else tmp.add(c[i]); 184 } 185 if(ans.cmp(tmp)<0){ 186 putchar('-'); 187 tmp.subtract(ans); 188 tmp.print(); 189 } 190 else{ 191 ans.subtract(tmp); 192 ans.print(); 193 } 194 puts(""); 195 } 196 } 197 return 0; 198 }
Fighting the Landlords http://acm.hdu.edu.cn/showproblem.php?pid=4930
1 #include<cstdio> 2 #include<cstring> 3 #define mt(a,b) memset(a,b,sizeof(a)) 4 const int M=32; 5 char my[M],his[M]; 6 int summy[M],sumhis[M],nummy[M],numhis[M]; 7 int getid(char c){ 8 if(c>='3'&&c<='9') return c-'0'; 9 if(c=='T') return 10; 10 if(c=='J') return 11; 11 if(c=='Q') return 12; 12 if(c=='K') return 13; 13 if(c=='A') return 14; 14 if(c=='2') return 15; 15 if(c=='X') return 16; 16 if(c=='Y') return 17; 17 } 18 void yes(){ 19 puts("Yes"); 20 } 21 void no(){ 22 puts("No"); 23 } 24 int findbigid(int a[],int num){ 25 for(int i=17;i>=3;i--){ 26 if(a[i]>=num){ 27 return i; 28 } 29 } 30 return -1; 31 } 32 int main(){ 33 int t; 34 while(~scanf("%d",&t)){ 35 while(t--){ 36 scanf("%s%s",my,his); 37 mt(summy,0); 38 for(int i=0;my[i];i++){ 39 summy[getid(my[i])]++; 40 } 41 mt(sumhis,0); 42 for(int i=0;his[i];i++){ 43 sumhis[getid(his[i])]++; 44 } 45 mt(nummy,0); 46 for(int i=3;i<=17;i++){ 47 nummy[summy[i]]++; 48 } 49 mt(numhis,0); 50 for(int i=3;i<=17;i++){ 51 numhis[sumhis[i]]++; 52 } 53 if(nummy[4]){ 54 if(nummy[4]==1&&!nummy[3]){ 55 if(!nummy[2]&&!nummy[1]){ 56 yes(); 57 continue; 58 } 59 if(!nummy[2]&&nummy[1]==2){ 60 yes(); 61 continue; 62 } 63 if(nummy[2]==1&&!nummy[1]){ 64 yes(); 65 continue; 66 } 67 } 68 } 69 else{ 70 if(nummy[3]){ 71 if(nummy[3]==1){ 72 if(!nummy[2]&&!nummy[1]){ 73 yes(); 74 continue; 75 } 76 if(nummy[2]==1&&!nummy[1]){ 77 yes(); 78 continue; 79 } 80 if(!nummy[2]&&nummy[1]==1){ 81 yes(); 82 continue; 83 } 84 } 85 } 86 else{ 87 if(nummy[2]){ 88 if(nummy[2]==1&&!nummy[1]){ 89 yes(); 90 continue; 91 } 92 } 93 else{ 94 if(nummy[1]==1){ 95 yes(); 96 continue; 97 } 98 if(nummy[1]==2&&summy[16]==1&&summy[17]==1){ 99 yes(); 100 continue; 101 } 102 } 103 } 104 } 105 if(summy[16]==1&&summy[17]==1){ 106 yes(); 107 continue; 108 } 109 if(sumhis[16]==1&&sumhis[17]==1){ 110 no(); 111 continue; 112 } 113 if(numhis[4]){ 114 if(!nummy[4]){ 115 no(); 116 continue; 117 } 118 int my4id=findbigid(summy,4); 119 int his4id=findbigid(sumhis,4); 120 if(my4id>his4id){ 121 yes(); 122 } 123 else{ 124 no(); 125 } 126 continue; 127 } 128 if(nummy[4]){ 129 yes(); 130 continue; 131 } 132 if(nummy[3]){ 133 if(!numhis[3]){ 134 yes(); 135 continue; 136 } 137 int my3id=findbigid(summy,3); 138 int his3id=findbigid(sumhis,3); 139 if(my3id>his3id){ 140 yes(); 141 continue; 142 } 143 if(nummy[2]&&!numhis[2]){ 144 yes(); 145 continue; 146 } 147 if(nummy[1]&&!numhis[1]){ 148 yes(); 149 continue; 150 } 151 } 152 if(nummy[2]){ 153 if(!numhis[2]&&!numhis[3]){ 154 yes(); 155 continue; 156 } 157 int my2id=findbigid(summy,2); 158 int his2id=findbigid(sumhis,2); 159 if(my2id>his2id){ 160 yes(); 161 continue; 162 } 163 } 164 int my1id=findbigid(summy,1); 165 int his1id=findbigid(sumhis,1); 166 if(my1id>his1id){ 167 yes(); 168 continue; 169 } 170 no(); 171 } 172 } 173 return 0; 174 }
end