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);
代码:
1 //Author: xiaowuga 2 #include <bits/stdc++.h> 3 using namespace std; 4 #define inf 0x3f3f3f3f 5 #define MAX INT_MAX 6 #define mem(s,ch) memset(s,ch,sizeof(s)) 7 const long long N=100000; 8 const long long mod=1e9+7; 9 typedef long long LL; 10 typedef int II; 11 typedef unsigned long long ull; 12 #define nc cout<<"nc"<<endl 13 #define endl " " 14 int main() { 15 ios::sync_with_stdio(false);cin.tie(0); 16 int n,a,b,c; 17 cin>>n>>a>>b>>c; 18 int k=min(a,b); 19 k=min(k,c); 20 if(n==1) {cout<<0<<endl;return 0;} 21 if(k==a||k==b){cout<<(n-1)*k<<endl;return 0;} 22 cout<<min(a,b)+(n-2)*k<<endl; 23 return 0; 24 }
B. Divisiblity of Differences
题目链接:http://codeforces.com/contest/876/problem/B
题目意思:现在有n个数,问是否可以从里面找出k个数,那么这k个数两两之间的差的绝对值是m的倍数。
题目思路:如果两个数的差是m的倍数,那么这两个数%m以后的余数相同,所以把所有数根据%m以后余数的不同分类,然后看是不是又哪一类中的元素超过k个。
代码:
1 //Author: xiaowuga 2 #include <bits/stdc++.h> 3 using namespace std; 4 #define inf 0x3f3f3f3f 5 #define MAX INT_MAX 6 #define mem(s,ch) memset(s,ch,sizeof(s)) 7 const long long N=100000; 8 const long long mod=1e9+7; 9 typedef long long LL; 10 typedef int II; 11 typedef unsigned long long ull; 12 #define nc cout<<"nc"<<endl 13 #define endl " " 14 map<int,int>a; 15 vector<int>G[N]; 16 int main() { 17 ios::sync_with_stdio(false);cin.tie(0); 18 int n,k,m; 19 int t; 20 cin>>n>>k>>m; 21 int ct=0; 22 for(int i=0;i<n;i++){ 23 cin>>t; 24 int x=t%m; 25 if(a.count(x)==0) a[x]=ct++; 26 G[a[x]].push_back(t); 27 } 28 int ans=-1; 29 for(int i=0;i<ct;i++){ 30 if(G[i].size()>=k){ 31 ans=i; 32 break; 33 } 34 } 35 if(ans==-1) {cout<<"No"<<endl;return 0;} 36 else{ 37 cout<<"Yes"<<endl; 38 for(int i=0;i<k;i++){ 39 cout<<G[ans][i]<<' '; 40 } 41 } 42 cout<<endl; 43 return 0; 44 }
C. Classroom Watch
题目链接:http://codeforces.com/contest/876/problem/C
题目意思:现在有一个数