原题传送器<----点我


题意:n个数字,请你给它们排个序围成一个环,满足任意一个数两边的数之和大于它本身,例如题目给的图(左图为正确答案),如果不存在这样的环就输出NO。
难度★


题解

这题主要靠思路,能想到正确的方法就很easy,码量不多。
对于这组数我们可以先排升序,然后取后三位比较(为什么,往下看) ,例如后三位是a[n-2],a[n-1],a[n],然后比较a[n]>a[n-1]+a[n-2]是否成立,如果不成立就说明肯定不能成环,反手就是输出NO;如果成立,先将a[n]和a[n-1]输出,然后除了a[n-2]的其他数直接输出就行,把a[n-2]最后输出;
即a[n] a[n-1] a[1] a[2] …a[n-3]
因为我们排过序,所以a[1]到a[n-3]都是升序列,两边数之和绝对大于它本身(光右边的数就大于),然后因为我们特判过所以a[n]<a[n-1]+a[n-2],而且a[n]为最大数,a[n-1],a[n-2]都小于它,所以也满足,这样所有数都满足了。


其实感觉这题也就A题的难度,讲的有点啰嗦,大致能明白就行。
上代码

#include #include #include #include  using namespace std; int a[100003]; int main() { int n; scanf("%d",&n); for(int i=1;in;i++) scanf("%d",&a[i]); sort(a+1,a+1+n,lessint>()); if(a[n](a[n-1]+a[n-2])) { cout"YES"endl; couta[n]" "a[n-1]" "; for(int i=n-3;i>=1;i--) { printf("%d ",a[i]); } couta[n-2]; } else cout"NO"; return 0; } 

写完题解,睡觉

0:35

~~

原题传送


INPUT

Output

Examples


题意
有个长度我n的字符串,然后把它分成k分,要使每份都good且为正数(good的要求为该数中0和1的个数不同),求输出最小的结果(答案不唯一输出一个即可)
难度
题解果然是cf典型的A题,只要能想明白,难度并不***r> 第一步:先判断整体1和0的个数,如果不同直接输出1和它本身
第二步:如果不同,先输出二(因为最小的结果就是拆成两个字符串,让两个都good),然后将第一个数和后面所有数拆开输出,这样后面的数绝对满足good(因为它原本1和0相等,现在拆走一个就肯定不相等),这样就OK了。
这个题简单就在于答案很多,满足一个即可,而最简单的就是把第一个数和后面拆开。

#include//万能头文件让我快乐 
using namespace std; int main() {
 int ans1,ans2; int n; string m; 
while(~scanf("%d"),&n) {
 cin >> m; ans1= 0,ans2 = 0; for(int i = 0;i < n;i++) 
{ if(m[i] == '1') ans1++; else ans2++; } 
if(ans2 != ans1) cout <<1<<endl<<m<< endl;
 else 
{ 
printf("2\n"); printf("%d",m[0]); for(int i = 1;i < n;i++)cout << m[i]; cout << endl; 
}
 }
 return 0; } 

每天水A题,天天没烦恼。。。
(下回做点难的,不能再混了。。)

~~