B - B

CodeForces - 994B

题内容:

Unlike Knights of a Round Table, Knights of a Polygonal Table deprived of nobility and happy to kill each other. But each knight has some power and a knight can kill another knight if and only if his power is greater than the power of victim. However, even such a knight will torment his conscience, so he can kill no more than k other knights. Also, each knight has some number of coins. After a kill, a knight can pick up all victim's coins.

Now each knight ponders: how many coins he can have if only he kills other knights?

You should answer this question for each knight.

Input
The first line contains two integers n and k (1≤n≤105,0≤k≤min(n−1,10)) — the number of knights and the number k from the statement. The second line contains n integers p1,p2,…,pn (1≤pi≤109) — powers of the knights. All pi are distinct. The third line contains n integers c1,c2,…,cn (0≤ci≤109) — the number of coins each knight has. Output
Print n integers — the maximum number of coins each knight can have it only he kills other knights. Examples
Input
4 2
4 5 9 7
1 2 11 33
Output
1 3 46 36
Input
5 1
1 2 3 4 5
1 2 3 4 5
Output
1 3 5 7 9
Input
1 0
2
3
Output
3
Note
Consider the first example. The first knight is the weakest, so he can't kill anyone. That leaves him with the only coin he initially has.
The second knight can kill the first knight and add his coin to his own two.
The third knight is the strongest, but he can't kill more than k=2 other knights. It is optimal to kill the second and the fourth knights: 2+11+33=46.
The fourth knight should kill the first and the second knights: 33+1+2=36.
In the second example the first knight can't kill anyone, while all the others should kill the one with the index less by one than their own. In the third example there is only one knight, so he can't kill anyone.

题意:有n个骑士,武力值为p[i],每人拥有c[i]个金币,每个骑士最多杀死k个武力值比他低的骑士,问每个人能获得的最多的金币数为多少?

思路:按武力值进行排序,再选出金币多的k个杀死,计算出金币数

但下面的代码超时了

#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,k;
cin>>n>>k;
long long a[n+5],b[n+5],c[n+5]={0};
for(long long i=0;i<n;i++)
{
cin>>a[i];
}
for(long long i=0;i<n;i++)cin>>b[i];
for(long long i=0;i<n;i++)
{
long long p=0;
for(long long j=0;j<n;j++)
{
if(a[i]>a[j])
{
c[p]=b[j];
++p;
}
}
sort(c,c+p);
int ct=0,num=b[i];
for(long long w=p-1;w>=0;w--)
{
if(ct<k)
{
num+=c[w];
++ct;
}
}
if(i==0)cout<<num;
else cout<<" "<<num;
}
}

修改后正确代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int n,k;
struct person
{
int num;//记录下标
int p;//武力值
int c;//原始的金币数
long long ct;//用于记录下总的金币数 注意要用long long
}s[maxn];
bool cmp(person a,person b)//按武力值排序
{
if(a.p!=b.p)return a.p<b.p;
else return a.c<b.c;
}
bool cmp1(person a,person b)
{
return a.num<b.num;
}
int main()
{
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>s[i].p;
s[i].num=i;
}
for(int i=0;i<n;i++)
{
cin>>s[i].c;
s[i].ct=s[i].c;
}
sort(s,s+n,cmp);
multiset<int,greater<int> >ss; //multiset会根据特定的排序原则将元素排序,且multisets允许元素重复
//multiset <int,greater<int> > s;创建一个从大到小排序的类型
multiset<int,greater<int> >::iterator it;
for (int i=0;i<n;i++)
{
int sum=0;
for(it=ss.begin();it!=ss.end();it++)
{
if(sum>=k)break;
s[i].ct+=*it;
sum++;
}
ss.insert(s[i].c);//将每个骑士最初金币值插入到容器中
}
sort(s,s+n,cmp1);//按下标排好序便于输出
for(int i=0;i<n;i++)cout<<s[i].ct<<" ";
cout<<endl;
}

C - C

CodeForces - 994C

You are given two squares, one with sides parallel to the coordinate axes, and another one with sides at 45 degrees to the coordinate axes. Find whether the two squares intersect.

The interior of the square is considered to be part of the square, i.e. if one square is completely inside another, they intersect. If the two squares only share one common point, they are also considered to intersect.

Input
The input data consists of two lines, one for each square, both containing 4 pairs of integers. Each pair represents coordinates of one vertex of the square. Coordinates within each line are either in clockwise or counterclockwise order. The first line contains the coordinates of the square with sides parallel to the coordinate axes, the second line contains the coordinates of the square at 45 degrees. All the values are integer and between −100 and 100. Output
Print "Yes" if squares intersect, otherwise print "No". You can print each letter in any case (upper or lower). Examples
Input
0 0 6 0 6 6 0 6
1 3 3 5 5 3 3 1
Output
YES
Input
0 0 6 0 6 6 0 6
7 3 9 5 11 3 9 1
Output
NO
Input
6 0 6 6 0 6 0 0
7 4 4 7 7 10 10 7
Output
YES
Note
In the first example the second square lies entirely within the first square, so they do intersect. In the second sample squares do not have any points in common. Here are images corresponding to the samples:

题意:给出两个正方形,第一行是一个正面表示的正方形,第二个是一个旋转四十五度角的正方形,问这两个正方形是否相交

思路:暴力每个正方形中的每个点,若有一点在两个正方形里都存在,则相交

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e3+5;
struct sqart
{
ll x;
ll y;
}a[10],b[10];
bool cmp(sqart a,sqart b)
{
if(a.x==b.x)return a.y<b.y;
else return a.x<b.x;
}
ll vis[maxn][maxn];
bool show()
{
for (ll i=a[1].x;i<=a[4].x;i++)
{
for(ll j=a[1].y;j<=a[4].y;j++)
{
vis[i+100][j+100]=1;//因为范围是-100到100 ,以防下标为负,故+100
}
}
for(ll i=b[1].x;i<=b[3].x;i++)//第二个正方形的左半部分枚举
{
for(ll j=0;j<=i-b[1].x;j++)
{
if(vis[i+100][b[1].y+j+100]||vis[i+100][b[1].y-j+100])
{
return true;
}
}
}
for(ll i=b[2].x;i<=b[4].x;i++)//右半部分
{
for(ll j=0;j<=b[3].y-b[1].y-(i-b[2].x);j++){
if(vis[i+100][b[1].y+j+100]||vis[i+100][b[1].y-j+100])
return true;
}
}
return false;
}
int main()
{
cin>>a[1].x >> a[1].y >> a[2].x >> a[2].y >> a[3].x >> a[3].y >> a[4].x >> a[4].y ;
cin>>b[1].x >> b[1].y >> b[2].x >> b[2].y >> b[3].x >> b[3].y >> b[4].x >> b[4].y ;
memset(vis,0,sizeof(vis));
sort(a+1,a+5,cmp);
sort(b+1,b+5,cmp);
if(show())
{
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}

最新文章

  1. Andorid实现点击获取验证码倒计时效果
  2. 聊天界面之进度条cell(一)
  3. maven分模块间依赖注意事项
  4. 标准I/O之实现细节
  5. 亿图图示专家v7.7破解版
  6. dede去除powered by dedecms
  7. [React] React Router: Route Parameters
  8. unique &amp;unique_copy
  9. libxml两种换行方法
  10. [Angular Tutorial] 8 - Templating Links &amp; Images
  11. 1.WF 4.5在项目中直接使用的问题
  12. jdk1.8hashmap源码解析
  13. golang-在gin中cookie跨域设置(配合ajax)
  14. Java - 数组排序 -- 浅析稳定性与复杂度
  15. 关闭或启动linux防火墙后,docker启动容器报错
  16. python --(链表)
  17. Python_装饰器复习_30
  18. #Weex与Android交互(一)
  19. SXSSExcelUtil
  20. PHP 生成、识别二维码及安装相关扩展/工具

热门文章

  1. Ubuntu中添加desktop entry
  2. linux centos7 模拟垃圾回收站功能以及 crontab 定时任务的设置
  3. 使用selenium模拟登录12306网站
  4. element-ui 用 el-checkbox-group 做权限管理
  5. Mybatis-plus&lt;二&gt;通用CRUD,分页
  6. Merchant
  7. .NET5修改配置不重启自动生效
  8. 缩减Centos7xfs磁盘空间
  9. apache php RabbitMQ配置方式
  10. 【OI技巧】解决cin、cout因输入输出慢而TLE的问题