比赛链接:http://codeforces.com/contest/1159
C:简单贪心
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<set>
#include<queue>
using namespace std;
#define ll long long
const ll INF=0x3f3f3f3f3f3f3f3f;
ll mp[1000005],mpp[1000005];
int main()
{
std::ios::sync_with_stdio(false);
int n,m,i,flag,flag1;
ll ans,maxn;
while(cin>>n>>m)
{
ans=0;
maxn=-INF;
flag=1;
flag1=0;
for(i=0;i<n;i++)
{
cin>>mp[i];
maxn=max(mp[i],maxn);
}
for(i=0;i<m;i++)
{
cin>>mpp[i];
if(maxn>mpp[i])
{
flag=0;
}
if(maxn==mpp[i])
{
// cout<<maxn<<" "<<mpp[i]<<endl;
flag1=1;
}
ans+=mpp[i];
}
if(!flag)
{
cout<<"-1"<<endl;
continue;
}
flag=1;
sort(mp,mp+n);
sort(mpp,mpp+m);
if(!flag1)
{//cout<<"qqqqqqqq"<<endl;
ans+=mp[n-1];
for(i=n-2;i>=0;i--)
{
// cout<<"ans1 "<<ans<<endl;
ans+=mp[i]*m;
// cout<<"ans2 "<<ans<<endl;
if(flag&&mp[i]<mpp[0])
{
flag=0;
ans-=mp[i];
}
}
cout<<ans<<endl;
}
else
{
for(i=n-2;i>=0;i--)
{
ans+=mp[i]*m;
}
cout<<ans<<endl;
}
}
return 0;
}
D:构造题,这里构造形如ababc的字符串,a里面全是1,b是一个0,c里面有k-2个1
所以比如说
7 3
1101101
算出a中1的个数就行
具体可以看这个博客写的很好:https://www.cnblogs.com/dd-bond/p/10858347.html
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<set>
#include<queue>
using namespace std;
#define ll long long
int main()
{
std::ios::sync_with_stdio(false);
int n,k,i;
while(cin>>n>>k)
{
int x=(n-k)/2;
for(i=0;i<n;i++)
{
if(x){
cout<<"1";
x--;
}
else {
cout<<"0";x=(n-k)/2;
}
}
cout<<endl;
}
return 0;
}