传送门:Problem - 1149A - Codeforces
考虑到除了2以外所有的质数都由奇数组成,因此贪心思路为构造一个数列,使得数列中前缀和为奇数的情况尽量多。
因此可以先输出2和1,再将所有的2输出,最后再输出所有的1,此时得到的前缀和为质数的数量最多。
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; int o,t; int n; int main(){ cin>>n; for(int i=1;i<=n;i++) { int x; cin>>x; if(x==1)o++; if(x==2)t++; } if(t){ t--; cout<<2<<" "; } if(o){ o--; cout<<1<<" "; } while(t){ t--; cout<<2<<" "; } while(o){ o--; cout<<1<<" "; } return 0; }