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
",sum);
37         }
38     }
39     return 0;
40 }
View Code

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 }
View Code
  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 }
View Code

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 }
View Code

end

原文地址:https://www.cnblogs.com/gaolzzxin/p/3898021.html