3
#include
using namespace std;
int main(){
int n, k;
cin>>n>>k;
if(n<1)
cout<<0<
int a[n];
for(int i=0;i
cin>>a[i];
for(int i=0;i
if(i==0 || a[i]!=a[i-1]){
int t = k-a[i];
int l=i+1, r=n-1;
while(l
if(a[l]+a[r]==t){
if(a[l]!=a[l-1])
cout<
l++;
r--;
}else if(a[l]+a[r]
l++;
else
r--;
}
}
}
return 0;
}
发表于 2020-01-29 01:01:34
回复(1)
2
固定一个数a,目标变成了k-a,双标志向中间靠近
发表于 2019-08-20 09:13:36
回复(2)
1
上一题为 求出不重复的二元组
在本题中,我们只需要限定三元组中第一个数,后两个数就跟上一题一摸一样
重点一:
去掉重复,我们保证不重复的二元组的同时,也要保证第一个数不一致
#include
#include
using namespace std;
void printtraid(vector& vec,int start,int n,int k)
{
int l=start+1,r=n-1;
while(l
{
if((vec[l]+vec[r])==k)
{
//cout<
if(l==0||vec[l]!=vec[l-1]) //确保输出不重复且不会溢出
{
printf("%d %d %d\n",vec[start],vec[l],vec[r]);
}
r--;
l++;
}
else if((vec[l]+vec[r])
{
l++;
}
else{
r--;
}
}
}
int main()
{
int n,k,fin;
cin>>n>>k;
//scanf("%d,%d",&n,&k);
vector vec(n);
for(int i=0;i
{
scanf("%d",&vec[i]);
}
int l=0,r=n-1,min;
for(int i=0;i
{
if(i==0||vec[i]!=vec[i-1])//去重复
{
fin=k-vec[i];
printtraid(vec,i,n,fin);
}
}
return 0;
}
发表于 2020-12-28 19:36:43
回复(0)
1
数据有点坑...
#include
#include
using namespace std;
typedef long long ll;
int main() {
ll N, K;
cin >> N >> K;
vector v(N);
for (int i = 0; i
cin >> v[i];
}
for (int i = 0; i
if (i == 0 || v[i] != v[i - 1]) {
int L = i + 1, R = N - 1;
while (L
ll sum = v[i] + v[L] + v[R];
if (sum == K) {
// if (L == i + 1 || v[L] != v[L-1])
// 这题神坑,答案不允许前两个数字相同???
if (v[L] != v[L-1])
cout <
L += 1;
R -= 1;
} else if (sum
L += 1;
} else {
R -= 1;
}
}
}
}
return 0;
}
发表于 2020-09-06 15:34:40
回复(0)
1
#include
using namespace std;
//这个要求了三元组前两个元素不相等才行(或者题目想说升序三元组?)
int main() {
int N;
cin>>N;
long long k;
cin>>k;
int i;
long long a[N];
long long target, res, nowl, nowr;
int l, r;
for(i = 0; i
cin>>a[i];
}
for(i = 0; i
if(i > 0 && a[i] == a[i-1]){
continue;
}
target = k - a[i];
l = i+1;
r = N-1;
while(a[l] == a[i] && l
l++;
}
while(l
res = a[l] + a[r];
if(res == target) {
cout<