Codeforces #350

A题:

题意:判断火星上的节假日最多和最少

分析:除以7,然后我们对原数模7的余数进行判断一下即可

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 int n;
15 int main()
16 {
17     while(cin>>n)
18     {
19         int minx,mx;
20         int t=n/7;
21         t*=2;
22         if(n%7==0){
23             minx=mx=t;
24         }else if(n%7==1){
25             minx=t;
26             mx=t+1;
27         }else if(n%7==6){
28             minx=t+1;
29             mx=t+2;
30         }else{
31             minx=t;
32             mx=t+2;
33         }
34         cout<<minx<<" "<<mx<<endl;
35     }
36     return 0;
37 }
View Code

B题:

题意:有n个机器人,第i个机器人纪录其前面的i-1个数和其本身,问第k个数是多少

分析:判断一下第k个属于第几个机器人的即可

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=500002;
15 long long dp[maxn];
16 int a[maxn];
17 int n;
18 int k;
19 int main()
20 {
21     while(cin>>n>>k)
22     {
23         for(int i=0;i<n;i++)
24             cin>>a[i];
25         int h;
26         int ans;
27         memset(dp,0,sizeof(dp));
28         for(int i=1;i<=n;i++){
29             dp[i]=dp[i-1]+i;
30             if(dp[i]>=k){
31                 h=i; break;
32             }
33         }
34         int flag=0;
35         if(dp[h]==k){
36             flag=1;
37         }else{
38             h--; flag=0;
39         }
40         if(flag) cout<<a[h-1]<<endl;
41         else{
42             int t=k-dp[h];
43             //cout<<"t: "<<t<<endl;
44             cout<<a[t-1]<<endl;
45         }
46     }
47     return 0;
48 }
View Code

C题:

题意:n个科学家来自不同国家,每个科学家对应懂一种语言,有双语电影,其中声音和文字是不同语言,希望找到一个电影院,让尽可能多的科学家能看懂,如果声音相同的情况比较文字尽量多的

分析:因为数据范围太大,用map进行统计每会说没中语言的科学家的人数,然后进行排序即可

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=200020;
15 map<int,int> vis;
16 typedef struct p
17 {
18     int id;
19     int aud,sub;
20 }p;
21 p s[maxn];
22 bool cmp(p a,p b)
23 {
24     if(a.aud==b.aud)
25         return a.sub>b.sub;
26     else
27         return a.aud>b.aud;
28 }
29 int main()
30 {
31     int n,m;
32     cin>>n;
33     for(int i=0;i<n;i++){
34         int x;
35         scanf("%d",&x);
36         vis[x]++;
37     }
38     cin>>m;
39     for(int i=0;i<m;i++){
40         int y;
41         scanf("%d",&y);
42         s[i].id=i+1;
43         s[i].aud=vis[y];
44     }
45     for(int i=0;i<m;i++){
46         int z;
47         scanf("%d",&z);
48         s[i].sub=vis[z];
49     }
50     sort(s,s+m,cmp);
51     printf("%d\n",s[0].id);
52     return 0;
53 }
View Code

 D题:

题意:做一个蛋糕需要n种成份,需要每种成分ai,每种成分有bi,同时还有k个能转换成任意成分的物品,问最多能构成多少物品

分析:可以以bi除以ai为序,然后用一个优先队列进行维护,期间模拟k个物品的情况即可

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=1010;
15 typedef struct p
16 {
17     int a,b;
18     int mul,mod; 
19     friend bool operator<(p x,p y){
20         return x.mul>y.mul;
21     }
22 }p;
23 p s[maxn];
24 int n,k;
25 int main()
26 {
27     while(cin>>n>>k)
28     {
29         for(int i=0;i<n;i++)
30             cin>>s[i].a;
31         for(int i=0;i<n;i++){
32             cin>>s[i].b;
33             s[i].mul=s[i].b/s[i].a;
34             s[i].mod=s[i].b%s[i].a;
35         }
36         priority_queue<p> que;
37         for(int i=0;i<n;i++)
38             que.push(s[i]);
39         while(true){
40             p h=que.top();
41             int t=h.a-h.mod;
42             k-=t;
43             if(k<0) break;
44             //cout<<"t: "<<t<<endl;
45             h.b+=t;
46             h.mod=h.b%h.a;
47             h.mul=h.b/h.a;
48             //cout<<h.mul<<endl;
49              if(k>=0){
50                 que.pop();
51                 que.push(h);
52                 if(k==0)
53                 break;
54             }
55         }
56         int z=que.top().mul;
57         cout<<z<<endl;
58     }
59     return 0;
60 }
View Code

 

转载于:https://www.cnblogs.com/wolf940509/p/5465278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值