第四届“传智杯”全国大学生IT技能大赛(初赛A组)

Posted 晁棠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四届“传智杯”全国大学生IT技能大赛(初赛A组)相关的知识,希望对你有一定的参考价值。

思维还是不够,只过了三题。还是不知道自己能不能够进复赛,太菜了自己。
还是要多做思维题。

A题
签到题,根据题意写即可。

#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <algorithm>
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>

using namespace std;

int n,T; 
int a[1005],amax,amin=inf;

void ready()

	cin>>n;
	_for(i,1,n)
	
		cin>>a[i];
		amin=min(amin,a[i]);
		amax=max(amax,a[i]);
	


void work()

	int d=amax-amin;
	_for(i,1,n)
	
		cout<<100*(a[i]-amin)/d<<' ';
	


int main()

    ready();   
    work();
    return 0;

B题
思维题,用二进制去思考。这题当时没有做出来,感谢楊哥赛后指点。
对于一个数x,假设x的二进制为101101。从左往右扫,当扫到第5位为1的时候,当y的这一位为0,后面位数任意时,这个y是必定小于x的。而由于后面位数任意,则x异或y的值必定大于25小于26-1。用前缀和统计这个区间内素数的个数,这样就能计算出答案。然后继续往下扫,扫到第k位为1,则则x异或y的值必定大于2k小于2k+1-1。

(因为洛谷交不了这题,不知道补题的代码对不对)

#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <algorithm>
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>

using namespace std;

const int N=2e6+1e5;

int n,T; 

ll sum[N+100],primes[N+100],pi;


void ready()
 
	_for(i,2,N)
	  sum[i]=1;
	_for(i,2,N)
	
		if(sum[i]) primes[++pi]=i;
		for(int j=1;primes[j]<=N/i;j++)
		
			sum[i*primes[j]]=0;
			if(i%primes[j]==0) break;
		
	
	_for(i,1,N)
	  sum[i]+=sum[i-1];
	cin>>T;


int qsm(int x,int y)

	int cnt=1;
	while(y)
	
		if(y&1) cnt*=x;
		x=x*x;
		y>>=1;
	
	return cnt;


void work()

	int x,t=0;
	ll ans=0;
	cin>>x;
	while(x)
	
		if(x&1)
		
			ans+=sum[qsm(2,t+1)-1]-sum[qsm(2,t)-1];
		
		t++;
		x>>=1;
	
	cout<<ans<<'\\n';


int main()

    ready();  
	while(T--) 
      work();
    return 0;

C题
用map去储存每个字段名所对应是第几个字段,然后用vector暴力去做即可。
注意,宏定义for之后是≤,注意写的时候的细节。

#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <algorithm>
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>

using namespace std;

int n,T,k,cnt; 
vector<int> v[105];
map<int,int> m;

void ready()

	cin>>n>>k;


void work()

	int t;
	cin>>t;
	if(t==1)
	
		int p;
		cin>>p;
		_for(i,1,p)
			int x,y;
			cin>>x>>y;
			if(!m[x]) m[x]=++cnt;
			v[m[x]].push_back(y);
		
	
	else
	
		int x,ymin,ymax,ans=0;
		cin>>x>>ymin>>ymax;
		x=m[x];
		_for(i,0,v[x].size()-1)
		  if(v[x][i]>=ymin && v[x][i]<=ymax)
		    ans++;
		cout<<ans<<'\\n';
	


int main()

    ready();   
    while(n--)
    work();
    return 0;

E题
易得,只有2和3这两个质数异或值为1,其他都不为1。

#include <iostream>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <cstring>
#include <math.h>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <algorithm>
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define mst(v,s) memset(v,s,sizeof(v))
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define ll long long
#define INF 0x7f7f7f7f7f7f7f7f
#define inf 0x7f7f7f7f
#define PII pair<int,int>

using namespace std;

int n,T; 


void ready()

	cin>>T;


void work()

	int a,b;
	cin>>a>>b;
	if(a>b) swap(a,b);
	if(a==1 && b==2) cout<<"Yes\\n";
	else cout<<"No\\n";


int main()

    ready();   
    while(T--)
      work();
    return 0;

以上是关于第四届“传智杯”全国大学生IT技能大赛(初赛A组)的主要内容,如果未能解决你的问题,请参考以下文章

第四届“传智杯”全国大学生IT技能大赛(决赛B组)题解

第四届“传智杯”全国大学生IT技能大赛(练习赛)完结

2021年全国职业院校技能大赛(中职组)网络安全竞赛第四套试题A模块解析(超级详细)

2021年全国行业职业技能竞赛暨第四届全国大学生大数据技能竞赛——职教学生组线上选拔赛

第四届江西省高校网络安全技能大赛初赛部分Writeup

第四届江西省高校网络安全技能大赛初赛部分Writeup