ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1.24日学习总结

2022-01-24 19:02:31  阅读:203  来源: 互联网

标签:总结 return int 这样的话 学习 && 100000000 题目 1.24


今天补了测试中的两个题目。题目如下。

这道题在测试中花了很多时间,我感觉绝大多数原因都是没看懂题目。 特别是题目中很明显的标志了。可以各使用n次,总数是2n。这加起来,不就是可以改2n次吗? 我每个选项都把它改成。A胜顺利就行了。。。。所以我当时真的挺无语的。代码如下。

#include<stdio.h>
int a[1000000],b[1000000];
int main(){
    int t;
    scanf("%d",&t);
    for(int s=0;s<t;s++){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=2*n;i++){ 
		scanf("%d",&a[i]);}
        for(int i=1;i<=2*n;i++) { 
        scanf("%d",&b[i]);}
        for(int i=1;i<=n;i++){ 
            if(b[i]==1) a[i]=3;
            if(b[i]==2) a[i]=1;
            if(b[i]==3) a[i]=2;
        }
        for(int i=n+1;i<=2*n;i++){ 
            if(a[i]==1) b[i]=2;
            if(a[i]==2) b[i]=3;
            if(a[i]==3) b[i]=1;
        }
        printf("%d\n",2*n);
         for(int i=1;i<=2*n;i++){
		 printf("%d ",a[i]);}
		 printf("\n");
        for(int i=1;i<=2*n;i++) {
		 printf("%d ",b[i]);}
        printf("\n");
    }
    return 0;
}

还有另外一题跟这个题几乎一样。但是他改了很恶心的一点。就是他必须要使用n次也就是每a,b都必须要改n次。 但是有些情况a是不需要改的。 因为有的情况可以,本来就是胜利的。 所以这种情况就会导致如果我们按上述方法来改的话。除非a全输了。不然的话肯定不可能恰好使用n次。

所以我就进行了一个标记。首先我是采用了一个计数器。 来保证改a和改b。是交替进行的。这样的话是为了确保最后多出来的。对a对b的操作次数不会相差太大。还要进行一个标记。标记这个原组合是a赢了还是a输了? 这个目的是为了在接下来。使用掉那些多出来的操作。 因为如果a赢了,我们就不进行更改。这样的话,我们使用多余的操作。也就是把他们换一种组合,就相当于消耗了两次机会。改a改b各一次。 当然得到的数肯定不会刚好是偶数。 这样的话。就需要改,我们原本改过的数,这样的话,就相当于改一次。 这里要注意的就是 改过后的组合。只需要和没改之前的,不一样就行。这样就相当于只改一次。然后这里其实还有一个小细节。因为如果剩下的次数不是偶数。那么一定会多用一次改a,就是说一定会少改一次b, 这样的话。我们只需要找到我们第一个改a的组合。再改一次,就相当于用掉一次改b的机会。所以我的代码中,只有改正b的次数

小于n的判断。 虽然也没几个人看我的代码。但我还是想说明一下。

具体代码如下,

  #include<stdio.h>
 int t,n,a[100000000],b[100000000],c[10000000],d[100000000]; 
 int  judge(int x,int y){
 	if(x==1&&y==2)return 1;
 	if(x==2&&y==3)return 1;
 	if(x==3&&y==1)return 1;
 	return 0;
 } 
 int vis[100000000];
 int main(){
 	scanf("%d",&t);
 	 for(int s=0;s<t;s++){
 		scanf("%d",&n);
 		int T=0,a1=0,b1=0;
 		for(int i=1;i<=n*2;i++){
 			scanf("%d",&a[i]);
 			c[i]=a[i];
 			vis[i]=0;
 		}
 		for(int i=1;i<=n*2;i++){
 			scanf("%d",&b[i]);
 			d[i]=b[i];
 		}
 		for(int i=1;i<=2*n;i++){
 			if(judge(a[i],b[i])==0) {
 			T++;
 			if(T%2!=0){
 				a1++;
 				c[i]=d[i]-1;
 				if(c[i]==0)c[i]=3;
 			} 
 			else{
 				b1++;
 				d[i]=c[i]+1;
 				if(d[i]==4)d[i]=1;
 			} 
 			vis[i]=1;			
 		}} 
 		for(int i=1;i<=2*n;i++){
 			if(vis[i]==0){ 
 			if(a1<n&&b1<n){
 				c[i]+=1;	
				 d[i]+=1;
 				if(c[i]==4)c[i]=1;
 				if(d[i]==4)d[i]=1;
 				a1++,b1++;
 			}
 			if(a1==b1&&a1==n)break;
 			}} 
 		if(b1<n){
 			for(int i=1;i<=n*2;i++){
 				if(vis[i]==1){
 					for(int j=1;j<=3;j++){
 						for(int k=1;k<=3;k++)
 							if(j!=a[i]&&k!=b[i]&&judge(j,k)==1){
							c[i]=j;
							 d[i]=k;}
 					} 
 					break;
 				}	
 			}
 		}
 	 
 		printf("%d\n",2*n);
 		for(int i=1;i<=n*2;i++){
		 	printf("%d ",c[i]);
		 }printf("\n");
 		for(int i=1;i<=n*2;i++) {
 			printf("%d ",d[i]);	
 	}printf("\n");
	 }
 	return 0;
 }

好啦,今天的学习总结就写到这里了,祝大家新年快乐。新的一年都能做成自己想做的事。

标签:总结,return,int,这样的话,学习,&&,100000000,题目,1.24
来源: https://blog.csdn.net/qq_63889673/article/details/122672709

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有