3.19训练赛

A.  金币 - 洛谷 P2669 - Virtual Judge

题意:第一天收到1枚金币,之后的两天每天收到两枚金币,再之后的三天每天收到三枚金币,以此类推,问n天后收到多少金币。

思路:用一个变量w记录次数,q记录当前每天能收到的金币,每天w++,w==q时重置为0,q++

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e3+10;
ll n,m,k;

void sovle(){
    cin>>n;
    int q=1,w=0;
    for(int i=0;i<n;i++){
        m+=q;
        w++;
        if(q==w){
            w=0;
            q++;
        }
    }
    cout<<m;
}    

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

B. 数字游戏 - 洛谷 P5660 - Virtual Judge

题意:问字符串中有几个1

思路:遍历字符串,是1就++

代码

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e3+10;
int n,m,k;

void sovle(){
    string s;
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]=='1'){
            m++;
        }
    }
    cout<<m;
}    

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

C.  标题统计 - 洛谷 P5015 - Virtual Judge

题意:输入一行可能包含大小写字母、数字字符、空格、换行符的字符串,问字符串大小写字母和数字字符的数量

思路:用getline(cin,s)读入一行字符串,遍历字符串,遍历到空格就不操作

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e3+10;
int n,m,k;

void sovle(){
    string s;
    getline(cin,s);
    for(int i=0;i<s.size();i++){
        if(s[i]!=' '){
            m++;
        }
    }
    cout<<m;
}    

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

D. 面积 - 洛谷 P5681 - Virtual Judge

题意:比较给出的正方形和矩形的大小

思路:注意开long long就行

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e3+10;
ll n,m,k;

void sovle(){
    cin>>n>>m>>k;
    if(n*n>m*k){
        cout<<"Alice";
    }
    else cout<<"Bob";
}    

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

E. 接水问题 - 洛谷 P1190 - Virtual Judge

题意:有n个人和m个水龙头,给出每个人的接水量,水龙头每秒供水量为1,只有当前一个人的接水完成时下一个人才能换上,问最少需要多少秒才能完成接水任务

思路:注意只有当一个人完成的时候下一个人才能补上(没看清楚一直WA到最后T_T),读入数组。如果人数小于水龙头数时输出接水量最大的,否则标记一下先让前m个人先接水,标记m+1的位置(就是下一个要接水的位置),当某个人接水完成时令其等于标记位置的接水量(替换那个人)

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e3+10;
ll n,m,k,sum,a[10005];

void sovle(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    if(n<=m){
        sort(a,a+n,greater<int>());
        cout<<a[0];
        return;
    }
    int k=m;
    while(k<n+m){
        for(int i=0;i<m;i++){
            a[i]--;
            if(a[i]==0){
                a[i]=a[k];
                k++;
            }
        }            
        sum++;
    }
    cout<<sum;
}    

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

F. 优秀的拆分 - 洛谷 P7071 - Virtual Judge

题意:给出一个数,询问这个数能被哪些二次幂的数相加而成,如果能,从大到小输出那些数,如果不能输出-1.

思路:比较简单的按位拆分和位运算题目(想到的话)。很明显,如果输入的数为奇数一定不能被组成。输入的数为n,i=64开始递减1,如果(n>>i)&1如果为1(n右移i次也就是n除2 i次如果为1,则2的i次方是组成n的数之一)输出。

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e5+10;
ll n, m, k;

void sovle(){
    cin>>n;
    if(n%2){
        cout<<"-1";
    }
    else{
        for(int i=32;i>0;i--){
            if(n>>i&1){
                cout<<(1<<i)<<' ';
            }
        }
    }
}

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

G.  扫雷游戏 - 洛谷 P2670 - Virtual Judge

题意:问非地雷格周围八个方向有几个地雷。

思路:遍历地图,遇到非地雷格就查找周围的八个方向(注意特判有没有出边界),开方向数组会比较方便查找。

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e5+10;
int n, m, k,dx[8]={0,1,0,-1,-1,1,1,-1},dy[8]={1,0,-1,0,1,1,-1,-1};

void sovle(){
    cin>>n>>m;
    char a[105][105];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            int sum=0;
            if(a[i][j]=='*') {cout<<'*';continue;}
            for(int k=0;k<8;k++){
                int x=dx[k]+i;
                int y=dy[k]+j;
                if(a[x][y]=='*'&&x>=0&&x<n&&y>=0&&y<m){
                    sum++;
                }
            }
            cout<<sum;
        }
        cout<<endl;
    }
}

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

H. 字符串的展开 - 洛谷 P1098 - Virtual Judge

题意:给定一个仅由数字、小写字母和减号-组成的字符串,类似d-h,4-8的字符串为简写,可能需要进行展开。

具体规则如下:减号同为小写字母或数字,且按字典序左边小于右边。输入三个数p1,p2,p3

1.若输入的p1为1,字母子串的减号替换为小写字母,p1为2,字母子串替换为大写字母,上述两种情况的数字子串替换方式不变,p1为3,则两者都替换为等量的字符*

2.若输入的p2表示替换的同一字符重复次数,如p2=2时d-h替换为deeffggh

3.若输入的p3为1,则被替换的字符正序输出,若p3=2,按逆序输出,例如当 p1=1、p2=2、p3=2时,子串 d-h 应扩展为 dggffeeh。

特殊的,若减号右边正好是左边的后继,只删除减号,如d-e输出de。如果减号右边字典序小于等于左边,输出保留减号。

思路:

不需要替换直接输出的情况:1.减号右边小于等于左边的字典序2.两边不同时是字母或数字

不替换但删除减号的情况:减号右边字典序为左边字典序+1

需要展开的时,用一个字符数组储存需要替换的字符,每个储存p2次,最后判断顺序还是逆序

特别的,连续个-号时保留输出。

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e5+10;
int n, m, k,p1,p2,p3;
char a[1000000];

void sovle(){
    cin>>p1>>p2>>p3;
    cin>>a;
    for(int i=0;i<strlen(a);i++)
    {
        if(a[i]=='-'&&((a[i+1]>='0'&&a[i+1]<='9'&&a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>a[i-1])||(a[i+1]>='a'&&a[i+1]<='z'&&a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>a[i-1])))
        {
            char s[1000000];
            int o=0;
            for(int j=a[i-1]+1;j<a[i+1];j++)
            {
                if(p1==3)
                for(int k=1;k<=p2;k++)
                s[++o]='*';
                else if(p1==1||(j>='0'&&j<='9'))
                for(int k=1;k<=p2;k++)
                s[++o]=j;
                else if(p1==2)
                for(int k=1;k<=p2;k++)
                s[++o]=j-32;
                
            }
            if(p3==1)
            for(int j=1;j<=o;j++)
            cout<<s[j];
            else
            for(int j=o;j>=1;j--)
            cout<<s[j];
        }
        else cout<<a[i];
    }
}

int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

I.  格雷码 - 洛谷 P5657 - Virtual Judge

题意:给出格雷码二进制串排序法,要求相邻的两位二进制串刚好有一个位置不同,最后一个与第一个二进制串也算相邻,问n位格雷码的第k位的二进制串。

思路:通过模拟推到,我们可以发现有这样的一个规律,第k位二进制串与k的异或值刚好是k/2,k^k^a=a,因此第k位二进制串可以由k^(k>>1)得到,特别的,这题数据范围到了2的64次方,所以得开unsigned long long。

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e5+10;
int a[66],i;
unsigned long long k,m,n,l;



void sovle(){
    cin>>n>>k;
    l=(k>>1);
    m=l^k;
    while(m!=0){
        a[i++]=(m&1);
        m=(m>>1);
    }
    for(i=n-1;i>=0;i--){
        cout<<a[i];
    }
}



int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

K. 海港 - 洛谷 P2058 - Virtual Judge

题意:给出n条船的信息,包括到达时间,船上人员个数,船上人员的国籍,问每辆船到达时的前内24小时有多少个国籍的人到达(包括他本身)

思路:用a数组储存国籍信息,book数组储存该国籍的人数,队列queue储存到达时间,输入时若当前国籍没出现过则sum++,若时间大于24小时则当前人员国籍数--,同时队列弹出当前时间,若当前国籍人数为0则sum--

代码:

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll; 
typedef pair<int, int> PII; 
const int N = 2e5+10;
int n,t,k,book[100005],a[300005],sum,num,head;
queue<int>v;


void sovle(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>t>>k;
        for(int j=0;j<k;j++){
            cin>>a[sum];
            v.push(t);
            if(book[a[sum++]]++==0){
                num++;
            }
        }
        while(t-v.front()>=86400){
            v.pop();
            if(--book[a[head++]]==0){
                num--;
            }
        }
        cout<<num<<endl;;
    }
}



int main()
{	
    //ios::sync_with_stdio(false), cin.tie(0),cout.tie(0); 
    int t = 1; 
    //cin>>t;
    
    while (t --){
        sovle();
    }

    return 0;
}

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Protocol3.19是一个通信协议,它定义了在计算机网络中,两个或多个通信实体之间进行数据交换的规则和格式。它是网络通信中非常重要的一部分,用于确保数据的可靠传输和正确解析。 Protocol3.19的设计和功能旨在提供高效的数据传输和通信协议,以满足各种不同的网络需求和应用场景。它可以应用于局域网和广域网的通信,以确保网络中的多个设备能够共享和传输数据。 Protocol3.19通过定义数据包的格式和结构,确保数据在网络中的传输是可靠的和有序的。它规定了数据包的起始和结束标志,以及数据包中包含的信息和校验机制,以防止数据的损坏或丢失。同时,它还定义了数据传输的流程和顺序,以确保数据能够按照正确的顺序到达目标设备。 Protocol3.19还提供了一些基本的网络服务,例如连接的建立和维护、数据的分片和重组、错误的检测和处理等。这些功能和服务能够帮助网络应用程序实现高效的数据传输和通信。 总之,Protocol3.19是一个重要的通信协议,用于确保计算机网络中数据的可靠传输和正确解析。它定义了数据包的格式、流程和校验机制,以及一些基本的网络服务,为网络通信提供了必要的规范和支持。 ### 回答2: Protocol 3.19是指一种通信协议,它用于在计算机网络中进行数据传输。这个协议规定了数据的格式,传输的方式,以及错误检测和修复等方面的内容。 Protocol 3.19采用了一种面向连接的通信方式。在建立连接之前,通信双方需要进行握手过程,以确保彼此都可以正常通信。握手过程中,会协商加密算法、传输速率、数据压缩等参数。 一旦连接建立成功,通信双方就可以开始传输数据。根据Protocol 3.19的规定,数据会被分割成小块,然后用数据包的形式进行传输。在传输过程中,每个数据包都会被赋予一个顺序编号,以确保数据的顺序正确。 为了保证数据的可靠性,Protocol 3.19引入了错误检测和修复机制。在每个数据包中,会附带一些校验码,用来检测数据是否出现错误。如果发现有错误出现,接收方可以向发送方请求重传数据。 此外,Protocol 3.19还支持多路复用和分包装等高级功能。多路复用允许同时传输多个数据流,提高了传输效率。分包装则使得大数据可以被分割成多个数据包进行传输,降低了传输的风险。 总的来说,Protocol 3.19是一种用于计算机网络中数据传输的通信协议。它采用了面向连接的通信方式,并且支持错误检测和修复,多路复用,分包装等功能。通过遵循Protocol 3.19的规定,通信双方可以实现高效、可靠的数据传输。 ### 回答3: protocol3.19是一个协议的版本号,用于标识和指定协议的特定版本。在计算机网络和通信中,协议是一种规定了数据交换和通信行为的约定。协议3.19是该协议的第三个版本,表示在之前的版本上进行了更新和改进。 协议3.19可能包含了一些新的功能、修复了之前版本的一些错误和漏洞,或者对原有功能进行了优化和增强。新的版本可能会引入新的特性,或在原有协议的基础上提供更好的性能和安全性。 协议3.19的使用需要各方的共同遵守和实施,以确保数据的准确传输和有效通信。协议3.19通常由网络设备、软件应用和系统之间的通信双方共同支持。在双方都遵守该协议的前提下,才能实现数据的正确解析和交换。 使用协议3.19的好处在于,通过不断升级和改进,可以提供更可靠、高效和安全的通信方式。协议版本的标识也方便了双方在通信过程中进行识别和判断,从而更好地进行数据交换和处理。 总之,protocol3.19是一个用于标识和指定协议特定版本的标识符。它代表该协议的第三个版本,可能包含了更新、改进和优化,有助于提高通信的可靠性和效率。它需要双方共同遵守和实施,才能实现准确的数据传输和有效的通信。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值