2 条题解

  • 2
    @ 2024-10-6 11:37:15

    X6C.もしも 题解

    思路

    按照人类智慧,在 a1=1a_1 = 1 时,序列为 1,a2,1,a2,11, \, a_2 , \, 1 , \, a_2, \, 1 … ;在 a2=1a_2 = 1 时,序列为 a1,1,a1,1,a1a_1, \,1, \, a_1 , \, 1 , \, a_1 …

    所以要想得到 ana_na1a_1a2a_2ana_n

    显然:

    • nn 为奇数时,a1=an,a2=1a_1 = a_n, \, a_2 = 1
    • nn 为偶数时,a1=1,a2=ana_1 = 1, \, a_2 = a_n

    然后,就没有然后了。

    时间复杂度 O(T)O(T)

    Code

    #include <bits/stdc++.h>
    using namespace std;
    
    int T;
    
    int main() {
    	cin >> T;
    	for (int a, b ; T-- ; ) {
    		cin >> a >> b;
    		if (a & 1) 
    		printf("%d %d\n", b, 1);
    		else printf("1 %d\n",  b);
    	}
    	return 0;
    }
    
    • 1
      @ 2024-10-4 16:42:45

      分享一下我是怎么发现这个构造的,观察数据范围,1an1091\le a_n \le10^9,但是题目又要求对于任意 1in1\leq i\leq n,满足 1ai1091\leq a_i\leq 10^9。所以要使 an1=1a_{n-1} = 1an2=ana_{n-2}=a_n,我们继续向前构造数的话就可以发现交替的 an,1,an,1,an,1\dots a_n,1,a_n,1,a_n,1\dots 可以满足题目的要求。

      #include<bits/stdc++.h>
      using namespace std;
      
      int main(){
      	int t;
      	cin>>t;
      	while(t--){
      		int a,b;
      		cin>>a>>b;
      		if(a&1){
      			cout<<b<<' '<<"1\n";
      		}else{
      			cout<<1<<' '<<b<<'\n';
      		}
      	}
      	return 0;
      }
      
      • 1

      信息

      ID
      75
      时间
      3000ms
      内存
      512MiB
      难度
      2
      标签
      递交数
      492
      已通过
      236
      上传者