light chaser 2019/12/5

拈花ヽ惹草 提交于 2020-01-13 13:34:49

话说自己写的文字不是会印象深刻吗

打字和手写差别还挺大呢......

 

 

这题我写的好

题意:输出分子分母和为n的最大的最简分数(分子分母互质)

他:暴力

     for (int i = n / 2 ; i >= 1; i--)
        if (__gcd(i, n - i) == 1)
        {
            cout << i << ' ' << n - i << endl;
            break;
        }

我:

    if(n&1) cout<<n/2<<" "<<n-n/2;
    else {
        if((n/2)&1) cout<<n/2-2<<" "<<n/2+2;
        else cout<<n/2-1<<" "<<n/2+1;
    }

//有一些结论:

三个数,只要这三个数中有两个数是奇数一个是偶数,最小公倍数就是这三个数的积。

互为质数的一些推论:

1. 相邻的两个奇数一定是互质数。如:5和7、75和77是互质数。

2. 两个数中的较大一个是质数,这两个数一定是互质数。如:3和19、16和97是互质数。

3. 1和其他所有的自然数一定是互质数。如:1和4、1和13是互质数。

4. 较大数比较小数的2倍多1或少1,这两个数一定是互质数。如:13和27、13和25是互质数。

5. 两个数中的较小一个是质数,而较大数是合数且不是较小数的倍数,这两个数一定是互质数。如:2和15、7和54是互质数。

哈哈哈哈哈哈哈

 

 

题意:l左撇子,r右撇子,a可左可右,组一支队,要求左右撇子人数相等,问队伍人数最多是多少。

我:

l, r, a

    cin>>l>>r>>a;
    if(abs(l-r)<=a) cout<<(max(l,r)+(a-abs(l-r))/2)*2;
    else cout<<(min(l,r)+a)*2;

他:

a, b, c

    if (a > b)
        swap(a, b);
    int d = min(b - a, c); 
    a += d, c -= d;
    cout << min(a, b) * 2 + c / 2 * 2 << endl;

//好优雅。。 

d=min(b-a,c) 的意思是,能填上就填,填不上就算了,d是要拿几个c去填。。。

天呐,竟然要用这种方式去解释他的思维,我也是够了。。。

 

 

从5张牌中去掉写有相同数字的牌2张或3张,问剩下的牌总和最小是多少。

我:

    for(int i=0;i<5;++i){
        cin>>a[i];
        s+=a[i];
    }
    sort(a,a+5);
    int maxn=0,ans=a[4],cnt=1;
    for(int i=4;i>0&&cnt!=3;--i){
        if(a[i]==a[i-1]) ans+=a[i-1],++cnt;
        else ans=a[i-1],cnt=1;
        if(cnt>1) maxn=max(maxn,ans);
    }

他:

    for (int i = 1; i <= 5; i++)
    {
        cin >> tmp;
        sum += tmp;
        s[tmp] += s[tmp] < 3;
    }
    int ans = sum;
    for (int i = 1; i <= 100; i++)
        if (s[i] >= 2)
            ans = min(ans, sum - s[i] * i);

//好喜欢这个 s[tmp] += s[tmp] <3,相同的牌数目再多也只能是3

 

 

字符串s里面有多少个某字符:

count(s.begin(), s.end(), s[0]) == s.size()

 

 

开篇还嘲笑他对素数理解不深,现在。。。

题意:推翻这个猜想:存在一个正整数n,它对于任意正整数m, n*m+1 是素数。

给出n,请找到一个正整数m,使n*m+1是合数。

我:

暴力isprime判断,唉。

他:

    if (n % 2)
        cout << 3 << endl;
    else if (n == 2)
        cout << 4 << endl;
    else
        cout << n - 2 << endl;

1. 如果是奇数,乘3还是奇数,再+1是偶数,一定是合数。(1*3+1)

//我一开始也分奇偶,但我是奇数输出1,这样1*1+1=2就不对了,随便输出个奇数,但不能是1

2. 如果是2,输出4。

3. 其他情况,n*(n-2)+1=n*n-2n+1=(n-1)^2

//卧槽。。这是怎么想到的呢

那如果 (n+1)^2=n*n+2n+1=n(n+2)

如果是2 输出n+2=4,也就是,输出n+2就不用特判第2种情况了

//oh 天呐 题目说m<=1000,他原来已经因为这WA过一发了,我这小聪,唉。

 

 

题意:

给出长度为n的a数组,求b数组

又:

                  

消元:

 

 

嘤,今天有好多我比他写得好的地方

某个构造题

他:

    if (n % 2)
    {
        for (int i = 1, j = n; i <= n / 2; i++, j -= 2)
            ans[j] = s[i], ans[j - 1] = s[n - i + 1];
        ans[1] = s[n + 1 >> 1];
    }
    else
        for (int i = 1, j = n; i <= n / 2; i++, j -= 2)
            ans[j - 1] = s[i], ans[j] = s[n - i + 1];
 
    cout << ans + 1 << endl;

我:

    int n=strlen(t+1);
    int cnt=0;
    for(int i=(n+1)/2,j=i+1;i;--i,++j){
        s[cnt++]=t[i];
        s[cnt++]=t[j];
    }
    cout<<s;

//孩子的脑子有时候不在线2333(oh我是时时不在线

 

 

题意:判断是否能去掉一点,使剩下所有点在y轴同侧

我:

    int n,a=0,b=0,x,y;
    cin>>n;
    for(int i=0;i<n;++i){
        cin>>x>>y;
        if(x<0) ++a;
        else ++b;
        if(a>1&&b>1){puts("No");return 0;}
    }
    puts("Yes");

他:

    int ans[2];
    while (n--)
    {
        int x, y;
        cin >> x >> y;
        ans[x > 0 ? 1 : 0] += 1;
    }
    cout << (ans[0] <= 1 || ans[1] <= 1 ? "YES" : "NO") << endl;

//好trick。。 还有这个ans[0] <=1 || ans[1] <=1 我写的是 a>1&&b>1 真的感觉我跟他的思维常常是相反的!

 

 

存最大值和次大值

        cin>>x;
        if(x>=maxn) maxn2=maxn,maxn=x;
        else if(x>=maxn2) maxn2=x;

 

 

题意:A有a颗糖,B有b颗糖

A先手,-1,-3,-5...,B后手,-2,-4,-6,问谁先给不出了。

2 4 6

B能玩 t 轮:(1+t)*t=b,t=sqrt(b),如果t*(t+1)>b,t=t-1。sqrt(5)=2,但2+4>5

A能玩 t 轮:(1+t)*t-t=t*t, t=sqrt(a)

比较大小

我:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    int aa=sqrt(a),bb=sqrt(b);
    if(bb*(bb+1)>b) --bb;
    if(aa>bb) puts("Valera");
    else puts("Vladik");
}

他:

#include <bits/stdc++.h>
using namespace std;
long long maxn[3];
int main()
{
    int a, b;
    cin >> a >> b;
    int c = sqrt(b);
    a = sqrt(a), b = c * (c + 1) > b ? c - 1 : c;
    cout << (a > b ? "Valera" : "Vladik") << endl;
    return 0;
}

//思路是一样的,他写得比较trick

我想了好久才想出来正解,WA了3发,他想了19分钟一发过

此题挺好的,单纯为记录此题题意

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!