E5-2019級航類第5次正式上機

一子落陣定殺伐
撥亂滿盤局中沙
陽春雪紛繁落入誰人家
曲高和者寡

A
思路:簽到題,白給

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2506410
 Created at: Fri Apr 17 2020 20:08:07 GMT+0800 (China Standard Time)
 Problem_id: 3261	Time: 4	Memory: 1608
*/

#include <stdio.h>
int n,x,y,k,cha;
int main(){
	while(scanf("%d%d%d%d",&n,&x,&y,&k)==4){
		cha=k+n-x;
		cha=cha%7;
		cha+=y;
		cha=cha%7;
		//printf("%d\n",cha);
		if(cha==4)puts("Thursday");
		else if(cha==3)puts("Wednesday");
		else if(cha==2)puts("Tuesday"); 
		else if(cha==5)puts("Friday");
		else if(cha==1)puts("Monday");
		else if(cha==0)puts("Sunday");
	    else if(cha==6)puts("Saturday");
	}
	return 0;
}

B
思路:排序板子題,這都不會退學吧

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2504095
 Created at: Fri Apr 17 2020 19:26:23 GMT+0800 (China Standard Time)
 Problem_id: 3255	Time: 6	Memory: 1676
*/

#include <stdio.h>
int n,a,j,tmp,i;
int zhn[1005];
int main(){
	n=0;
	while(scanf("%d",&a)==1){
		n++;
		zhn[n]=a;
	}
	for(i=1;i<=n;i++){
		for(j=i+1;j<=n;j++){
			if(zhn[i]>zhn[j]){
				tmp=zhn[i];
				zhn[i]=zhn[j];
				zhn[j]=tmp;
			}
		}
	}
	for(i=1;i<=n;i++){
		printf("%d ",zhn[i]);
	}
	return 0;
}

C
思路:模擬,白給

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2503316
 Created at: Fri Apr 17 2020 19:14:39 GMT+0800 (China Standard Time)
 Problem_id: 3267	Time: 4	Memory: 1732
*/

#include <stdio.h>
int n,m,i,j;
int zhn[105][10]; //第i個傻子第j次考試分數 
int fen[105];//每次考試的分數 
int lgr[10];//lgr這麼狠,一定代表優秀人數 
int main(){
	scanf("%d%d",&m,&n); 
	for(i=1;i<=m;i++){
		for(j=1;j<=n;j++){
			scanf("%d",&zhn[i][j]);
			fen[j]+=zhn[i][j];
		}
	}
	for(i=1;i<=n;i++)printf("%.2lf ",(double)(fen[i])/m);
	printf("\n");
	for(i=1;i<=m;i++){
		for(j=1;j<=n;j++){
			if(zhn[i][j]>=80){
				lgr[j]++;
			} 
		}
	}
	for(i=1;i<=n;i++) printf("%.2lf%% ",(double)(lgr[i])/m*100.0);
	printf("\n");
	double cs=0;
	for(i=1;i<=m;i++){
		cs=0.000;
		for(j=1;j<=n;j++){
			cs+=(double)(zhn[i][j])*1.00;
		}
		printf("%.2lf\n",cs/n);
	}
	return 0;
}

D
思路:字符串什麼的最墨跡了嗚嗚嗚,闊以學習提下這個isspace函數的用法,好像是在ctype.h這個庫裏面(庫裏牛逼)這個東西是用來判斷是不是空字符的,非常好用的說嘿嘿,好多這種函數,你們闊以自己探索。

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2509790
 Created at: Fri Apr 17 2020 21:41:22 GMT+0800 (China Standard Time)
 Problem_id: 3253	Time: 14	Memory: 1668
*/

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char zhn[100005];
char lgr[100005];
int ans,i;
int main(){
	   ans=0;
       while(gets(zhn)!=NULL){
	    	int len=strlen(zhn);
	    	for(i=len-1;isspace(zhn[i]);i--)  zhn[i+1]='\0';
			len=i+1; 
		    if(len>=ans){
		    	ans=len;
		    	for(i=0;i<len;i++) lgr[i]=zhn[i];
			}
       }
       printf("%d ",ans);
       for(i=0;i<=ans-1;i++) printf("%c",lgr[i]); 
       printf("#END");
	return 0;
}

E
思路:這題也挺白給的(白給你還錯兩次,傻子實錘了)
俺爲什麼會錯呢,我沒給0設置初值嗚嗚嗚。注意初值設定麼麼噠
(好像當年我就打過100萬的表被人揍了嗚嗚嗚

* 
 Author: 張皓南
 Result: AC	Submission_id: 2511160
 Created at: Fri Apr 17 2020 23:02:18 GMT+0800 (China Standard Time)
 Problem_id: 3106	Time: 125	Memory: 17300
*/

#include <stdio.h>
int modd=1000003,i,q,n;
long long jc[1000055];
long long zhn[1000055];
int main(){
	jc[1]=1;
	jc[0]=0;
	zhn[0]=1;
	zhn[1]=2;
	for(i=2;i<=1000000;i++) {
		jc[i]=(jc[i-1]%modd*i%modd)%modd;
		zhn[i]=(zhn[i-1]%modd+jc[i]%modd)%modd;
	}
		
	scanf("%d",&q);
	while(q--){
		scanf("%d",&n);
		printf("%lld\n",zhn[n]);
	}
	return 0;
}

F
思路:這題白給,照着模擬就行

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2508597
 Created at: Fri Apr 17 2020 20:49:24 GMT+0800 (China Standard Time)
 Problem_id: 3256	Time: 552	Memory: 9316
*/

#include <stdio.h>
#include<string.h>
int h,w,m,i,j,x,y;
int jv1[1005][1005];
int jv2[15][15];
int jv3[1005][1005];
int main(){
	scanf("%d%d%d",&h,&w,&m);
	for(i=1;i<=h;i++){
		for(j=1;j<=w;j++){
			scanf("%d",&jv1[i][j]);
		}
	}
	for(i=1;i<=m;i++){
		for(j=1;j<=m;j++){
			scanf("%d",&jv2[i][j]);
		}
	}
	for(x=1;x<=h-m+1;x++){
		for(y=1;y<=w-m+1;y++){
			  for(i=1;i<=m;i++){
				for(j=1;j<=m;j++){
					jv3[x][y]+=jv1[x+i-1][y+j-1]*jv2[i][j];
					
				}
			}
		}
	}
	for(x=1;x<=h-m+1;x++){
		for(y=1;y<=w-m+1;y++){
			printf("%d ",jv3[x][y]);
		}
		printf("\n");
	}
	return 0;
}

G
思路:愛地魔力轉圈圈~~(模擬

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2508123
 Created at: Fri Apr 17 2020 20:40:26 GMT+0800 (China Standard Time)
 Problem_id: 3195	Time: 10	Memory: 1772
*/

#include <stdio.h>
#include<string.h>
char a[105][105],laji;
int n,i,j;
int xx,yy,x,y,s;
int vis[105][105];
char zhn[105][105];
int main(){
	scanf("%d",&n);
	for(i=1;i<=n;i++)scanf("%s",a[i]); 
	for(i=1;i<=n;i++){
		for(j=0;j<n;j++){
		    zhn[i][j+1]=a[i][j]; 
		} 
		
	}
	i=1,j=1;
	while(s!=n*n){
		while(j<=n&&vis[i][j]==0){
		if(zhn[i][j]>='a'&&zhn[i][j]<='z') printf("%c",zhn[i][j]); 
        vis[i][j]=1;
        s++;j++;   
       }
	   j--;i++;
           
       while(i<=n&&vis[i][j]==0){
        if(zhn[i][j]>='a'&&zhn[i][j]<='z') printf("%c",zhn[i][j]);
         vis[i][j]=1;
         s++;
		 i++;              
       }
	   i--;j--;
           
       while(j>0&&vis[i][j]==0){
        if(zhn[i][j]>='a'&&zhn[i][j]<='z') printf("%c",zhn[i][j]);
         vis[i][j]=1;
         s++;j--; 
       }
	   j++;i--;
           
       while(i>0&&vis[i][j]==0){
        if(zhn[i][j]>='a'&&zhn[i][j]<='z')printf("%c",zhn[i][j]);
         vis[i][j]=1;
         s++;i--;           
       }
	   i++;j++;
	}
	printf("\n");
	for(i=1;i<=n;i++) 
	for(j=1;j<=n;j++) 
	vis[i][j]=0;
	s=0;
	i=1,j=1;
		while(s!=n*n){       
		
		while(i<=n&&vis[i][j]==0){
        if(zhn[i][j]>='A'&&zhn[i][j]<='Z') printf("%c",zhn[i][j]);
         vis[i][j]=1;
         s++;
		 i++;              
       }
	   i--;j++;
		
		while(j<=n&&vis[i][j]==0){
		if(zhn[i][j]>='A'&&zhn[i][j]<='Z') printf("%c",zhn[i][j]); 
        vis[i][j]=1;
        s++;j++;   
       }
	   j--;i--;
           
       while(i>0&&vis[i][j]==0){
        if(zhn[i][j]>='A'&&zhn[i][j]<='Z')printf("%c",zhn[i][j]);
         vis[i][j]=1;
         s++;i--;           
       }
	   i++;j--;
           
       while(j>0&&vis[i][j]==0){
        if(zhn[i][j]>='A'&&zhn[i][j]<='Z') printf("%c",zhn[i][j]);
         vis[i][j]=1;
         s++;j--; 
       }
	   j++;i++;
	}
	return 0;
}

H
思路:設定兩個變量作爲頭標記和尾標記(尾標記好像沒用的說
然後碰到字母就往前掃,碰到不是字母的就從當前位置輸出到頭標記
(尾標記確實沒用QWQ)

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2510291
 Created at: Fri Apr 17 2020 22:04:25 GMT+0800 (China Standard Time)
 Problem_id: 3264	Time: 43	Memory: 1816
*/

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char zhn[120005];
int n;
int ans,i,j,tou,wei,k;
int main(){
	scanf("%d",&n);
	while (getchar() != '\n');
	for(i=1;i<=n;i++){
		memset(zhn,0,sizeof(zhn));
		gets(zhn);
		int len=strlen(zhn);
		tou=wei=-1;
		printf("Case #%d: ",i);
		for(j=0;j<len;j++){
			if((zhn[j]>='A'&&zhn[j]<='Z')||(zhn[j]>='a'&&zhn[j]<='z')){
				if(tou==wei) {
					tou=j;
					if((zhn[j+1]>='A'&&zhn[j+1]<='Z')||(zhn[j+1]>='a'&&zhn[j+1]<='z')) continue;
					else{
							if(zhn[j]=='a'||zhn[j]=='e'||zhn[j]=='i'||zhn[j]=='o'||zhn[j]=='u')printf("%c",(char)(zhn[j]-32));
							else if(zhn[j]=='A'||zhn[j]=='E'||zhn[j]=='I'||zhn[j]=='O'||zhn[j]=='U') printf("%c",zhn[j]);
						    else if(zhn[j]>='A'&&zhn[j]<='Z')printf("%c",(char)(zhn[j]+32));
						    else printf("%c",zhn[j]);
						    tou=wei=j;
					}
					
				}
				else{
					if((zhn[j+1]>='A'&&zhn[j+1]<='Z')||(zhn[j+1]>='a'&&zhn[j+1]<='z')) continue;
					else{
						
						for(k=j;k>=tou;k--){
							if(zhn[k]=='a'||zhn[k]=='e'||zhn[k]=='i'||zhn[k]=='o'||zhn[k]=='u')printf("%c",(char)(zhn[k]-32));
							else if(zhn[k]=='A'||zhn[k]=='E'||zhn[k]=='I'||zhn[k]=='O'||zhn[k]=='U') printf("%c",zhn[k]);
						    else if(zhn[k]>='A'&&zhn[k]<='Z')printf("%c",(char)(zhn[k]+32));
						    else printf("%c",zhn[k]);
						}
						tou=wei=j;
					}
				}
			}
			else printf("%c",zhn[j]);
		}
		printf("\n");
	}
	return 0;
}

I
思路:KMP算法,優秀的字符串匹配算法
爲啥出這麼多字符串啊
吃飽了撐的叭

感興趣可以學學,我不給講謝謝,CSDN上都有

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2513614
 Created at: Sat Apr 18 2020 11:16:23 GMT+0800 (China Standard Time)
 Problem_id: 3257	Time: 4	Memory: 1604
*/

#include <stdio.h>
#include <string.h>
char s[1055];
char b[1055];
char zhn[1005];
int nex[1005];
int lenb,i,p,flag,lens,lenzhn,j;
int ti[1005];
void kmp(){
	memset(nex,0,sizeof(nex));
	nex[0]=0;
	for(i=1,p=0;i<lenb;i++){
		while(p>0&&b[i]!=b[p]) p=nex[p-1];
		if(b[i]==b[p]) p++;
		nex[i]=p;
	}
	return ;
}
int main(){
	gets(s);
	gets(b);
	gets(zhn);
	lenb=strlen(b);
	
	
	lens=strlen(s);
	
	lenzhn=strlen(zhn);
	
	while(s[lens-1]==' '||s[lens-1]=='\n'||s[lens-1]=='\t'||s[lens-1]=='\r') lens--; 
	while(b[lenb-1]==' '||b[lenb-1]=='\n'||b[lenb-1]=='\t'||b[lenb-1]=='\r') lenb--; 
	while(zhn[lenzhn-1]==' '||zhn[lenzhn-1]=='\n'||zhn[lenzhn-1]=='\t'||zhn[lenzhn-1]=='\r') lenzhn--; 
	lens--;
	lenb--;
	lenzhn--;
	kmp();
	memset(ti,0,sizeof(ti));
	for(i=0,p=0;i<lens;i++){
		while(p>0&&s[i]!=b[p]) p=nex[p-1];
		if(b[p]==s[i]) p++;
		if(p==lenb){
			flag=1;
			ti[i-lenb+1]=1;
		}
	}
	if(!flag) printf("No Replacement!");
	else{
	for(i=0;i<lens;i++){
		if(ti[i]){
		
		   for(j=0;j<lenzhn;j++) printf("%c",zhn[j]);
		   i+=lenb-1;
		}
		else printf("%c",s[i]); 
	}
	printf(";");		
	}

	return 0;
}

J
思路:這個題還蠻有意思的哈(爲什麼做水題會有這麼大快感哈哈哈哈草)
m是數值大,n是個數多
於是兩個明顯用不同算法
m的用一個小遞推,先把m那行排序,f[i]代表到i這個位置,有f[i]個連續的相同數,隨便推一波就可
n<1e3 桶排序,白給的

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2511435
 Created at: Fri Apr 17 2020 23:24:04 GMT+0800 (China Standard Time)
 Problem_id: 3254	Time: 198	Memory: 1736
*/

#include <stdio.h>
#include <string.h>
int n,m,res,num,i,x,num2,res2,tmp,j;
int zhn[1005],lgr[1005];
int f[1005];
int main(){
	while(scanf("%d%d",&m,&n)==2){
		
		res=0,num=0;
		for(i=1;i<=m;i++) scanf("%d",&zhn[i]),f[i]=1;
		for(i=1;i<=m;i++){
			for(j=i+1;j<=m;j++){
				if(zhn[i]>zhn[j]){
					tmp=zhn[i];
					zhn[i]=zhn[j];
					zhn[j]=tmp;
				}
			}
		}
		
		for(i=2;i<=m;i++) if(zhn[i]==zhn[i-1]) f[i]=f[i-1]+1;
		for(i=1;i<=m;i++){
			if(f[i]>=num){
				res=zhn[i];
				num=f[i];
			}
		}
		
		num2=0;res2=0;
		memset(lgr,0,sizeof(lgr));	
		for(i=1;i<=n;i++){
			scanf("%d",&x);
			lgr[x]++;
		}
		for(i=1;i<=1000;i++){
			if(lgr[i]>=num2){
				num2=lgr[i];
				res2=i;
			}
		}
		printf("%d %d\n",res,res2);
	} 
	return 0;
}

K
水題好

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2506028
 Created at: Fri Apr 17 2020 20:00:52 GMT+0800 (China Standard Time)
 Problem_id: 3139	Time: 4	Memory: 1684
*/

#include <stdio.h>
long long jv1[15][15];
long long jv2[15][15];
long long jv3[15][15];
int a1,b1,a2,b2,a3,b3,i,j,k,l;
long long tmp[15][15];
long long zhn[15][15];
int main(){
	scanf("%d%d%d%d%d%d",&a1,&b1,&a2,&b2,&a3,&b3);
	for(i=1;i<=a1;i++){
		for(j=1;j<=b1;j++){
			scanf("%lld",&jv1[i][j]);
		}
	}
	for(i=1;i<=a2;i++){
		for(j=1;j<=b2;j++){
			scanf("%lld",&jv2[i][j]);
		}
	}
	for(i=1;i<=a3;i++){
		for(j=1;j<=b3;j++){
			scanf("%lld",&jv3[i][j]);
		}
	}
	for(i=1;i<=a1;i++){
		for(j=1;j<=b2;j++){
			for(k=1;k<=b1;k++){
				tmp[i][j]+=jv1[i][k]*jv2[k][j];
			}
		}
	}
	for(i=1;i<=a1;i++){
		for(j=1;j<=b3;j++){
			for(k=1;k<=b2;k++){
				zhn[i][j]+=tmp[i][k]*jv3[k][j];
			}
		}
	}
	for(i=1;i<=a1;i++){
		for(j=1;j<=b3;j++){
			printf("%lld ",zhn[i][j]);
		}
		printf("\n");
	}
	return 0;
}

L
思路:高精度模板,不過用三進制實現,都一樣,模擬即可
裏面有幾個神奇的函數,想知道自己查,我要吃飯了

/* 
 Author: 張皓南
 Result: AC	Submission_id: 2514072
 Created at: Sat Apr 18 2020 12:03:34 GMT+0800 (China Standard Time)
 Problem_id: 3268	Time: 274	Memory: 1932
*/

#include <stdio.h>
#include <string.h>
char a[10005],b[10005],a1[10005],b1[10005],n[10005];
int s1[20005],s2[10005],c[20005],x,y,l1,l2,i;
int main(){
	while(scanf("%s%s",a,b)!=EOF){
       x=0,y=0;
       memset(c,0,sizeof(c));
       memset(s1,0,sizeof(s1));
       memset(s2,0,sizeof(s2));
       memset(n,0,sizeof(n));
       memset(a1,0,sizeof(a1));
       memset(b1,0,sizeof(b1));
	   l1=strlen(a);
       l2=strlen(b);
       
       
	   if(a[0]!='-'&&b[0]!='-'){//兩個正數相加 
       	  for(i=0;i<l1;i++) s1[l1-i]=a[i]-'0';
       	  for(i=0;i<l2;i++) s2[l2-i]=b[i]-'0';
       	  while(x<=l1||x<=l2){
       	  	x++;
       	  	c[x]=y+s1[x]+s2[x];
       	  	y=c[x]/3;c[x]=c[x]%3;
		  }
		  while(c[x]==0&&x>1) x--;
		  for(i=x;i>=1;i--) printf("%d",c[i]);
		  printf("\n");
	   }
	   
	   else if(a[0]=='-'&&b[0]=='-'){//兩個負數相加 
	   	   printf("-");
		   for(i=0;i<l1-1;i++) s1[l1-1-i]=a[i+1]-'0';
		   for(i=0;i<l2-1;i++) s2[l2-1-i]=b[i+1]-'0';
		   while(x<=l1-1||x<=l2-1){
       	  	x++;
       	  	c[x]=y+s1[x]+s2[x];
       	  	y=c[x]/3;c[x]=c[x]%3;
		  }
		  while(c[x]==0&&x>1) x--;
		  for(i=x;i>=1;i--) printf("%d",c[i]);
		  printf("\n");
	   }
	   
	   else if(a[0]=='-'){//第二個減第一個 
	   	  for(i=0;i<l1-1;i++) a1[i]=a[i+1];
		  l1--;
		  if(l2<l1||(l1==l2&&strcmp(b,a1)<0)){
		  	strcpy(n,b);
            strcpy(b,a1);
            strcpy(a1,n);
            printf("-");
		  }
		  l1=strlen(a1);
		  l2=strlen(b);
		  for(i=0;i<l1;i++) s1[l1-i]=a1[i]-'0';
		  for(i=0;i<l2;i++) s2[l2-i]=b[i]-'0';
		  while(x<=l1||x<=l2){
		  	x++;
		    if(s2[x]<s1[x]){
		    	s2[x]+=3;
		    	s2[x+1]--; 
			}
			c[x]=s2[x]-s1[x];	
		  }
		  while(c[x]==0&&x>1) x--;
		  for(i=x;i>=1;i--) printf("%d",c[i]);
		  printf("\n");
	   }
	   
	   else if(b[0]=='-'){//第一個減第二個 
	   	for(i=0;i<l2-1;i++) b1[i]=b[i+1];
		  l2--;
		  if(l2>l1||(l1==l2&&strcmp(b1,a)>0)){
		  	strcpy(n,b1);
            strcpy(b1,a);
            strcpy(a,n);
            printf("-");
		  }
		  l1=strlen(a);
		  l2=strlen(b1);
		  for(i=0;i<l1;i++) s1[l1-i]=a[i]-'0';
		  for(i=0;i<l2;i++) s2[l2-i]=b1[i]-'0';
		  while(x<=l1||x<=l2){
		  	x++;
		    if(s1[x]<s2[x]){
		    	s1[x]+=3;
		    	s1[x+1]--; 
			}
			c[x]=s1[x]-s2[x];	
		  }
		  while(c[x]==0&&x>1) x--;
		  for(i=x;i>=1;i--) printf("%d",c[i]);
		  printf("\n");
	   	
	   }
	   
	} 
	
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章