首页 > 其他分享 >双周赛3

双周赛3

时间:2022-12-13 13:55:20浏览次数:55  
标签:题目 int 香肠 双周 range vector return

1.打字

题目链接:题目详情 - 7-1 打字 (pintia.cn)

纯模拟枚举签到题

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int l_y,l_b,l_g,l_r;
 4 int r_r,r_g,r_b,r_y;
 5 int main()
 6 {
 7     string s;
 8     cin>>s;
 9     for(int i=0;i<s.size();i++)
10     {
11         if(s[i]=='1'||s[i]=='Q'||s[i]=='A'||s[i]=='Z')l_y++;
12         else if(s[i]=='2'||s[i]=='W'||s[i]=='S'||s[i]=='X')l_b++;
13         else if(s[i]=='3'||s[i]=='E'||s[i]=='D'||s[i]=='C')l_g++;
14         else if(s[i]=='4'||s[i]=='R'||s[i]=='F'||s[i]=='V')l_r++;
15         else if(s[i]=='5'||s[i]=='T'||s[i]=='G'||s[i]=='B')l_r++;
16         else if(s[i]=='6'||s[i]=='Y'||s[i]=='H'||s[i]=='N')r_r++;
17         else if(s[i]=='7'||s[i]=='U'||s[i]=='J'||s[i]=='M')r_r++;
18         else if(s[i]=='8'||s[i]=='I'||s[i]=='K'||s[i]==',')r_g++;
19         else if(s[i]=='9'||s[i]=='O'||s[i]=='L'||s[i]=='.')r_b++;
20         else if(s[i]=='0'||s[i]=='P'||s[i]==';'||s[i]=='/'||s[i]=='-'||s[i]=='['||s[i]==']'||s[i]=='\''||s[i]=='=')r_y++;
21     }
22      cout<<l_y<<endl<<l_b<<endl<<l_g<<endl<<l_r<<endl
23          <<r_r<<endl<<r_g<<endl<<r_b<<endl<<r_y<<endl;
24 }

2.分香肠

题目链接:题目详情 - 7-2 分香肠 (pintia.cn)

题目的意思就将N根香肠平均的分成M份,并且要求切割的次数最少,求最少的次数.
1) 当N%M==0时,直接输出为0;
2)当N > M时,没人将得到一根完整的香肠,在将剩下的N%M根香肠平均分成M份,所以,令N = N % M后,直接跳到第三步;
3)当N < M时, 如果M%N==0, 则将每跟香肠切(M/N-1)刀; 否则,切(M/N)刀;
4)将切割之后,每跟香肠剩下的一小部分再进行平均分配。这时,是将N小段香肠平均分成(M%N)份。(即M=M%N)
5) 回到第一步进行循环,结束条件:当N是M的倍数时,结束循环,或者当M为0时,结束循环。

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,m;
 6     cin>>n>>m;
 7     int ans=0;
 8     while(n%m!=0)
 9     {
10         if(n>m)n=n%m;
11         int s=m%n==0?m/n-1:m/n;
12         m=m%n;
13         ans=ans+s*n;
14         if(m==0)break;
15     }
16     cout<<ans;
17 }

3.会议安排

题目链接:题目详情 - 7-3 h0145. 会议安排 (pintia.cn)

按照区间右端点排序(左端点不行),类似于区间选点,挑出覆盖区间最多的点数,贪心证明真抽象

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 struct Range{
 4     int l,r;
 5 }range[10005];
 6 bool cmp(Range a,Range b)
 7 {
 8     return a.r<b.r;
 9 }
10 int main()
11 {
12     int m;
13     cin>>m;
14     for(int i=0;i<m;i++)
15     {
16         int n;
17         cin>>n;
18         for(int i=0;i<n;i++)
19         {
20             cin>>range[i].l>>range[i].r;
21         }
22         sort(range,range+n,cmp);
23         int res=0;
24         int t=-2e9;
25         for(int i=0;i<n;i++)
26         {
27             if(range[i].l>=t)
28                {
29                   res++;
30                    t=range[i].r;
31                }
32         }
33         cout<<res<<endl;
34     }
35 }

4.神秘密码

递归,也可以用栈,这样单独每次读入一个字符去递归处理简单易懂

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 string read()
 4 {
 5     string s="",s1;
 6     char c;
 7     while(cin>>c)
 8     {
 9         if(c==']')return s;
10         else if(c=='[')
11         {
12             int n;
13             cin>>n;
14             s1=read();
15             while(n--)s+=s1;
16         }
17         else s+=c;
18     }
19 }
20 
21 int main()
22 {
23     cout<<read();
24     return 0;
25 }

5.国王游戏

题目链接:P1080 [NOIP2012 提高组] 国王游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目思路:直接将所有大臣按左右手上的数的乘积从小到大排序,得到的序列就是最优排队方案。

题目推理:每个人左手影响的是他后面的所有人,而右手仅仅影响自己;
                  既然想尽可能减少花费,那么左手大的人就必须往后放,否则会导致他后面人的钱都变大;
                  同时,右手仅仅影响自己,既然想降低开销,那么就应该把右手大的人也往后放,因为越靠后前面大臣的左手累计的乘积越大,那么这只很大的右手在除的时候,发挥的作用也越大(相比放                      在前面,轻易的就把这个很大的除数浪费掉了);
                  因此,左右手这两个属性是同向的,都是越大越应该往后放,至于为什么是乘法而不是加法,因为本题就是乘除法计算

格外注意:本题考查高精×低精度,高精÷低精度,因为每个人手中的值<10000,最多1000人

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1010;
 4 typedef pair<int,int>PII;
 5 int n;
 6 PII p[N];
 7 vector<int> mul(vector<int>&a,int b)
 8 {
 9     vector<int>c;
10     int t=0;
11     for(int i=0;i<a.size();i++)
12     {
13         t+=a[i]*b;
14         c.push_back(t%10);
15         t/=10;
16     }
17     while(t)c.push_back(t%10),t/=10;
18     while(c.size()>1 && c.back()==0)c.pop_back();
19     return c;
20 }
21 vector<int> div(vector<int>&a,int b)
22 {
23     vector<int>c;
24     int r=0;
25     for(int i=a.size()-1;i>=0;i--)
26     {
27         r=r*10+a[i];
28         c.push_back(r/b);
29         r%=b;
30     }
31     reverse(c.begin(),c.end());
32     while(c.size()>1&&c.back()==0)c.pop_back();
33     return c; 
34 }
35 vector<int> max_vec(vector<int>a,vector<int>b)
36 {
37     if(a.size()>b.size())return a;
38     if(a.size()<b.size())return b;
39     if(vector<int>(a.rbegin(),a.rend()) > vector<int>(b.rbegin(),b.rend()))return a;
40     return b;
41     
42 }
43 int main()
44 {
45     cin>>n;
46     for(int i=0;i<=n;i++)
47     {
48         int a,b;
49         cin>>a>>b;
50         p[i]={a*b,a};
51     }
52     sort(p+1,p+1+n);
53     vector<int>product(1,1);
54     vector<int>res(1,0);
55     for(int i=0;i<=n;i++)
56     {
57         if(i)res=max_vec(res,div(product,p[i].first/p[i].second));
58         product=mul(product,p[i].second);
59     }
60     for(int i=res.size()-1;i>=0;i--)cout<<res[i];
61     cout<<endl;
62     return 0; 
63 }

 

标签:题目,int,香肠,双周,range,vector,return
From: https://www.cnblogs.com/Zac-saodiseng/p/16978563.html

相关文章

  • KubeSphere 社区双周报 | OpenFunction v0.8.0 发布 | 2022-12-09
    KubeSphere从诞生的第一天起便秉持着开源、开放的理念,并且以社区的方式成长,如今KubeSphere已经成为全球最受欢迎的开源容器平台之一。这些都离不开社区小伙伴的共同努力......
  • 双周赛2
    输出全排列签到题,不解释1#include<bits/stdc++.h>2usingnamespacestd;3constintN=15;4intpath[N];5intn;6boolst[N];7voiddfs(intu)8......
  • KubeSphere 社区双周报 | KubeKey v3.0.2 发布 | 2022-11-24
    KubeSphere从诞生的第一天起便秉持着开源、开放的理念,并且以社区的方式成长,如今KubeSphere已经成为全球最受欢迎的开源容器平台之一。这些都离不开社区小伙伴的共同努力......
  • LeeCode 92双周赛复盘
    T1:分割圆的最少切割次数思维题:n为偶数时,可以对半切割,切割\(\frac{n}{2}\)次即可n为奇数时,不满足对称性,需要切割n次n为1时,不需要切割publicintnum......
  • 第一次双周赛
    https://pintia.cn/problem-sets/1591416544356323328/exam/problems/1591417091146764289T1只需要判断前后有没有L,在把这里涂成C最后输出即可,i=0要特判#include<bit......
  • leetcode 第90场双周赛
    6226.摧毁一系列目标题意:对于数组中每一个数nums[i],可以摧毁数组中值等于nums[i]+c*space的数(c为非负整数),求摧毁最大数量时的最小nums[i]思路:如果两个数x,y可以同时被摧......
  • KubeSphere 社区双周报 | 2022-10-28
    KubeSphere从诞生的第一天起便秉持着开源、开放的理念,并且以社区的方式成长,如今KubeSphere已经成为全球最受欢迎的开源容器平台之一。这些都离不开社区小伙伴的共同努力......
  • 89 场双周赛
    2.二的幂数组中查询范围内的乘积解法1.暴力枚举n最大是1e9,未超出int表示范围,最多有30个2的幂查询数组最大是1e5暴力枚举的最差时间复杂度就是\(3e6\),不会超时时间复......
  • # 87双周赛
    这次只做出了三道题6184.统计共同度过的日子数不熟悉api,没用过sscanf,在处理日期字符串的时候耽误了很多时间,最后用的substr()和stoi(stoi还是现场在网上搜的,哈哈哈)......
  • 灵感宝盒新增「线上云展会」产品,「直播观赏联动」等你共建丨RTE NG-Lab 双周报
    前言哈喽各位开发者,「RTENG-Lab双周报」如期而至!近两周,我们更新了一些新的实时互动场景和产品,也举办了代码实验室的第一次线下活动,与大家一起体验了声网最新的4.0SDK......