Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)

A. Trip For Meal

题目链接:http://codeforces.com/contest/876/problem/A

题目意思:现在三个点1,2,3,1-2的路程是a,1-3的路程是b,2-3的路程是c,从1点开始,小熊维尼在1点吃过一次蜂蜜了,但是他要吃n次蜂蜜,每次他离开一个地方以后这个地方的蜂蜜就会自动补充,问最少需要走多少距离。

题目思路:如果n=1,那么就是0,如果n等于2,那么答案说就是min(a,b),如果n>2,答案就是min(a,b)+(n-2)*min(a,b,c);

代码:

 //Author: xiaowuga
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define MAX INT_MAX
#define mem(s,ch) memset(s,ch,sizeof(s))
const long long N=;
const long long mod=1e9+;
typedef long long LL;
typedef int II;
typedef unsigned long long ull;
#define nc cout<<"nc"<<endl
#define endl "\n"
int main() {
ios::sync_with_stdio(false);cin.tie();
int n,a,b,c;
cin>>n>>a>>b>>c;
int k=min(a,b);
k=min(k,c);
if(n==) {cout<<<<endl;return ;}
if(k==a||k==b){cout<<(n-)*k<<endl;return ;}
cout<<min(a,b)+(n-)*k<<endl;
return ;
}

B. Divisiblity of Differences

题目链接:http://codeforces.com/contest/876/problem/B

题目意思:现在有n个数,问是否可以从里面找出k个数,那么这k个数两两之间的差的绝对值是m的倍数。

题目思路:如果两个数的差是m的倍数,那么这两个数%m以后的余数相同,所以把所有数根据%m以后余数的不同分类,然后看是不是又哪一类中的元素超过k个。

代码:

 //Author: xiaowuga
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define MAX INT_MAX
#define mem(s,ch) memset(s,ch,sizeof(s))
const long long N=;
const long long mod=1e9+;
typedef long long LL;
typedef int II;
typedef unsigned long long ull;
#define nc cout<<"nc"<<endl
#define endl "\n"
map<int,int>a;
vector<int>G[N];
int main() {
ios::sync_with_stdio(false);cin.tie();
int n,k,m;
int t;
cin>>n>>k>>m;
int ct=;
for(int i=;i<n;i++){
cin>>t;
int x=t%m;
if(a.count(x)==) a[x]=ct++;
G[a[x]].push_back(t);
}
int ans=-;
for(int i=;i<ct;i++){
if(G[i].size()>=k){
ans=i;
break;
}
}
if(ans==-) {cout<<"No"<<endl;return ;}
else{
cout<<"Yes"<<endl;
for(int i=;i<k;i++){
cout<<G[ans][i]<<' ';
}
}
cout<<endl;
return ;
}

C. Classroom Watch

题目链接:http://codeforces.com/contest/876/problem/C

题目意思:现在有一个数

上一篇:UVA10561 Treblecross 组合游戏/SG定理


下一篇:Codeforces Round #441 (Div. 2)