话说自己写的文字不是会印象深刻吗
打字和手写差别还挺大呢......
这题我写的好
题意:输出分子分母和为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分钟一发过
此题挺好的,单纯为记录此题题意
来源:CSDN
作者:Anaesthesia417
链接:https://blog.csdn.net/weixin_42104573/article/details/103944385