Codeforces Round #723 (Div. 2)
题号 | 题目 | 知识点 |
---|---|---|
A | Mean Inequality | 签到 |
B | I Hate 1111 | 思维 |
C | Potions (Easy Version) | 思维 |
C1 | Potions (Hard Version) | 思维 |
D | Kill Anton | 思维+逆序对 |
E | Oolimry and Suffix Array | |
F | Median Queries |
CF1526A Mean Inequality
题意:
给你一个序列a,现在要求你重新排列a得到b,使得b中不存在,bi=(bi-1 + bi+1 )/2,b0=b2n,b2n+1=b1
题解:
排个序,然后序列的前半部分和后半部分一次输出
代码:
#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;
//qdu打铁匠
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=100;
int a[maxn];
int main()
{int t; t=read();while(t--){int n=read();memset(a,0,sizeof(a));for(int i=1;i<=2*n;i++)cin>>a[i];sort(a+1,a+1+n+n);cout<<a[1]<<" "<<a[n+1];for(int i=2;i<=n;i++){cout<<" "<<a[i];cout<<" "<<a[n+i];}cout<<endl;}return 0;
}
B. I Hate 1111
题意:
给你一个数x,问这个x是否可以拆成11,111,1111,11111…的和
题解:
我们来看这个全1序列,1111可以被11 * 101表示,11111也可以被11和111表示,也就是说满足题意的x一定是由11和111组成的,也就是x=a * 11+b * 111
111 = 11 * 10 +1
所以x = a * 11 +b * (11 * 10 +1)=(a + 10 * b) * 11 + b
那么b=x%11,
得到了b,用x减去b * 111,然后得到的结果看是否能整除11,如果可以就说明可以组成
代码:
#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;
//qdu打铁匠
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
int main()
{int t;cin>>t;while(t--){int n;cin>>n;int b=n%11;if(n-b*111<0)puts("NO");else if(((n-b*111)%11)==0)puts("YES");else puts("NO");}return 0;
}