当前位置: 代码迷 >> 综合 >> Codeforces 1283(A,B,C) Round#611(Div.3)
  详细解决方案

Codeforces 1283(A,B,C) Round#611(Div.3)

热度:47   发布时间:2023-12-22 14:12:28.0

A. Minutes Before the New Year

题意:计算此刻时间到24:00整还有多少分钟(多组测试样例)。

AC代码:

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=2*1e5+5;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin>>t;int h,m;while(t--){
    cin>>h>>m;if(m)cout<<(23-h)*60+60-m<<endl;elsecout<<(24-h)*60<<endl;}return 0;

B. Candies Division

题意:圣诞老人有n种糖果,他想把它们赠予k个孩子。他想在所有k个孩子之间分配尽可能多的糖果。
孩子们最少分到a颗糖果,最多a+1颗糖,拥有a颗糖的孩子的数量不超过?k/2?(小于或等于?k/2?)。(“ k/2”是k除以2并四舍五入为最接近的整数。例如,如果k = 5,则?k/2?=?5/2?= 2。)
您的任务是找到圣诞老人可以给孩子的最大糖果数量,以便他会满意的。

思路:相当于要让(n%k)<= k/2.

AC代码:

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=2*1e5+5;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;cin>>t;int n,k;while(t--){
    cin>>n>>k;int tmp=n%k;if(tmp<=k/2) cout<<n<<endl;else cout<<n-tmp+k/2<<endl;}return 0;
}

C. Friends and Gifts

题意:n个人之间互相送礼,要求不能自己送给自己,且每个人必须送一份礼物收一份礼物。i表示第i个人的id,ai表示要收到该人礼物的人的id;(ai=0表示不知道送给谁,ai!=0即为收礼人id)输入满足条件。

思路:开两个数组,一个用来存送礼的人,一个用来存要收礼的人,如果第i个送礼和收礼的人相同,则和临近的一个相互交换。最后输出所有收礼人id即可。

AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=2e5+5;
int x[MAXN],a[MAXN],b[MAXN];
bool c[MAXN];
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;for(int i=1;i<=n;i++){
    cin>>x[i];c[x[i]]=1;}int cnt=0,tmp=0;for(int i=1;i<=n;i++){
    if(!x[i]) a[cnt++]=i;if(!c[i]) b[tmp++]=i;}for(int i=0;i<cnt;i++){
    if(a[i]==b[i]){
    int t=i,y=(i+1)%cnt;swap(b[t],b[y]);}}for(int i=0;i<cnt;i++)x[a[i]]=b[i];for(int i=1;i<=n;i++) cout<<x[i]<<' ';return 0;
}
  相关解决方案