Logo wuziyue的博客

博客

2023年4月月赛2题解 第三题

2023-04-16 18:00:39 By wuziyue

从左至右,从上至下建立坐标,发现了什么?

数字1:横+纵=2;

数字2至3:横+纵=3;

数字4至6:横+纵=4;

懂了?

一号问:

1.先分组:如:样例19:1+2+3+4+5=15, 1+2+3+4+5+6=21, 所以19在第六组 所以横+纵=7

2.找出本组最小数,(如第六组为16)此数位于(1,横+纵-1)(如16位于(1,6))

3.算目标数-最小数=x(19-16=3),由于方正排列规则为向左下,所以目标数位于(1+x,横+纵-1-x)(如19位于(1+3,6-3))

        int n;
        cin>>n;
        int sum=0,d=0,sum2=1;
        while(sum<n){
            d++;
            sum+=d;
            sum2++;
        }
        sum-=d;
        sum++;
        sum2--;
        int a1=1,a2=sum2;
        while(sum!=n){
            sum++;
            a1++;
            a2--;
        }
        cout<<a1<<' '<<a2;

二号问倒推即可 1.得出目标所在组 2.所在组最小值+(横坐标-1)为目标

int x,y;
        cin>>x>>y;
        int sum2=x+y-1;
        int sum=sum2*(sum2-1)/2;
        sum+=x;
        cout<<sum;

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。