首页 > 其他分享 >SMU Summer 2024 Contest Round 3(7.10)zhaosang

SMU Summer 2024 Contest Round 3(7.10)zhaosang

时间:2024-07-14 19:18:46浏览次数:10  
标签:Summer 7.10 cout Contest int ll cin long include

打的最菜一次,最惨一次,题读假了
A-A
http://162.14.124.219/contest/1007/problem/A

签到题
要解决这道题,素数对,数据量不是很大,所以我们可以先预处理素数,这个偶数肯定是等于小于它的两个素数,所以只需要遍历到小于它即可,把素数存起来,然后这两个素数的和等于这个偶数,并且要求相差最小所以遍历选差值最小的即可
代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	//ios::sync_with_stdio(0),cout.tie(0),cin.tie(0);
	int a[100010],n,i,j;
	for(i=3;i<=10000;i++)
	{
		a[i]=i;
	}
	for(i=2;i<=10000;i++)
	{
		for(j=2*i;j<=10000;j+=i)
		{
			a[j]=0;}}

	while(scanf("%d",&n)!=EOF)
	{
		int b;
		int ans=1000000;
	
		for(i=3;2*i<=n;i++)
			if(a[i]+a[n-i]==n){
				if(abs(n-2*i)<ans){
					ans=abs(n-2*i);
					b=i;
				}
				}
		   
				printf("%d %d\n",b,n-b);
		}

		
	}
D-D

http://162.14.124.219/contest/1007/problem/D
签到题,不评价。

#include <bits/stdc++.h>
using namespace std;

int main(){
	int n,b,sum=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		int b;
		cin>>b;
		if(b>10){
			sum+=b-10;
		}
	}
	cout<<sum;
}

B-B

http://162.14.124.219/contest/1007/problem/B
找规律,有规律结论n=m-2;,需要特判n为1,n等于m时
代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(0),cout.tie(0),cin.tie(0);
	long long n,m;
	while(scanf("%lld %lld",&n,&m)!=EOF&&m!=0&&n!=0)
	{
        if(m==1)cout<<0<<'\n';
        else if(n==1){
            if(m==2)cout<<2;
            else cout<<m;
        }else
			cout<<n+m-2<<'\n';
}
    return 0;
}
I-I

http://162.14.124.219/contest/1007/problem/I

我在前面的题读假了,导致后面的题没有时间做不明白,确实很伤。
这道题就是给你一串数字问你最少删除多少个数字使得修改后的数满足是3的倍数。
如果没有输出-1;
有个很有意思的结论,如果它每位数字和加起来是三的倍数,这个数就是三的倍数
所以按照这个道理,我们先判断原本的数是不是三的倍数。然后关键的来了。
我们把所有的数余三,每一位数只有可能是0 1 2,我们可以这样想,如果余三之后的总和
余三为1,说明它差最小差一个二,最小差两个1,如果余三为2,说明最小差一个1,
注意这里还有可能是最少差两个2,因为加4了余数就是0,如果小于以上条件就是没有,这里
还需要特判一下如果满足上面条件但是它长度为他的值时,如11 22 44 他们加起来余三但是他们会把
自己全部删除,这个时候为0,所以我们只需要判断它是不是长度等于它某个数的数量,如果是就是-1

按照思路代码如下:

#include <bits/stdc++.h>
using namespace std;
using ll =long long;
string s;
ll v[10000001];
map<ll,ll>mp;
int main(){
	
	cin>>s;
	ll ans=stoll(s);
	if(ans%3==0){
		cout<<0;
		return 0;
	}
	ll sum=0;
	ll res=0;
	int le=s.length();
	for(int i=0;i<le;i++){
		v[i]=(s[i]-'0')%3;
		mp[v[i]]++;
		sum+=v[i];
	}

	if((sum-2)%3==0&&sum-2!=0)
	{
		if(mp[2]>0){
			cout<<1;
		}else if(mp[1]>=2)
        {
            if(mp[1]==le){
                cout<<-1;
			}else
                cout<<2;
		}
		else 
			cout<<-1;
	}else if((sum-1)%3==0&&sum-1!=0){
		
		if(mp[1]>0){
			cout<<1;
		}else if(mp[2]>=2){
            if(le==mp[2])
                cout<<-1;
            else
            cout<<2;
		}
		else 
			cout<<-1;
		
	}else if(mp[0]>0){
        cout<<mp[1]+mp[2];
    }else
        cout<<-1;
	
}

F-F

http://162.14.124.219/contest/1007/problem/F

木有时间写,但是后面补题也写了好久,但是终于学会写这种枚举数量的题了。
跟之前训练的一个孵小鸡很像,但是我现在学会的枚举跟简洁了。
本题思路暴力枚举,因为数据量不大,做法如下,B数组每一个里面有两个值,
你设置成一个为0,一个为1,这个时候相当于有2的m个选择,枚举每种里面的一个情况,
从全部都是0到全部都是1,找到满足A数组数量最多

代码如下:

#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;

	long long n,m,k;
map<pair<ll,ll>,int>mp;

map<int,pair<ll,ll>>mp2;
int main()
{
	unordered_set<ll>st;
	//暴力枚举
	//设置选中和未选中的状态
	//枚举所有开关的状态
	//每个开关的状态为0或者1
	ios::sync_with_stdio(0),cout.tie(0),cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		ll a,b;
		cin>>a>>b;
		mp[make_pair(a,b)]++;
	}
	cin>>k;
	for(int i=1;i<=k;i++){
		ll a,b;
		cin>>a>>b;
		mp2[i]=make_pair(a,b);
		
	}
	ll ma=pow(2,k)-1;
	ll ans=0;
    for(int i=0;i<=ma;i++){
		ll cnt=0;
		 bitset<16> bt(i);
		for(int j=1;j<=k;j++){
			bool pd=bt.test(j-1);
			if(pd==false){
				st.insert(mp2[j].first);
			}else
					st.insert(mp2[j].second);
		}
		for(auto it=mp.begin();it!=mp.end();it++){
			ll f=it->first.first;
			ll s=it->first.second;
			if(st.find(f)!=st.end()&&st.find(s)!=st.end()){
					  cnt+=it->second;
			}
		}
		  ans=max(cnt,ans);
			st.clear();
	}
	cout<<ans;
	return 0;
}

标签:Summer,7.10,cout,Contest,int,ll,cin,long,include
From: https://www.cnblogs.com/dontian/p/18297128

相关文章

  • 2023 Henan Provincial Collegiate Programming Contest
    和零时加的队友打了一下,计算几何摆了,最优化摆了,adhoc摆了。A.小水獭游河南枚举前缀,是\(O(|\Sigma|)\)的,然后判断一下是不是回文串即可。B.ArtforRest昨天才做过这个套路的加强版。显然只用判断类似\(\max(a,b)<\min(b+1,c)\)的条件。暴力枚举是调和级数的。C.Toxel......
  • Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362)
    这场比赛还是比较水的A,B,C跳过D题dij把点权和边权都转换为边权即可E题DP可以用\(map\)存一下等差数列的差先说\(O(n^4)\),\(f_{len,i,j,t}\)分别表示长度,现在在\(i\),上一个在\(j\)显然动态转移方程就有了\(f_{len,i,j,k}=\sum_{k=1}^{k=j-1}f_{len-1,j,k,t}\)点击查看......
  • AtCoder Beginner Contest 362 补题记录(A~E,G)
    A分三类情况讨论即可。voidsolveqwq(){intr=io.read(),g=io.read(),b=io.read();stringqwq=io.readstring();if(qwq=="Blue")printf("%lld\n",min(r,g));elseif(qwq=="Red")printf("%lld\n",......
  • 南京大学计算理论之美 (Summer 2024)暑期学校游记
    day-nzero4338和我说有这么个暑校,报名了day0到了钟山风雨地,石头城下水南京到了南京大学(仙林校区),被硬件震撼了一波和zero4338两人互相贩卖焦虑:为啥还没预习这个,也没预习那个到了南京大学(鼓楼校区),和同学转鼓楼校区,和同学和zero4338和同学吃饭回酒店之后说预习预习,但是......
  • SMU Summer 2024 Contest Round 3
    1.To3原题链接:http://162.14.124.219/contest/1007/problem/I记录数组中除3余数的种类和个数,以及数组元素总和除3的余数,最后判断(考虑总余数为1,两个元素余数为2和总余数为2,两个元素余数为1的特殊情况)查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespa......
  • SMU Summer 2024 Contest Round 2
    1.MinimumWidth原题链接:http://162.14.124.219/contest/1006/problem/C二分一行最大容量,如果check小于等于总行数就扩大,反之则缩小查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m;inta[1000000],b[1000000];boolcheck(intx){......
  • 7.10日学习打卡----初学Redis(五)
    7.10日学习打卡目录:7.10日学习打卡一.redis功能流水线pipeline什么是流水线?pipeline实现使用pipeline发布与订阅Redis的发布与订阅发布订阅命令行实现慢查询Redis命令执行的整个过程如何进行配置实践建议二.redis的持久化机制RDB持久化机制触发机制-主要三种方式......
  • 7.10日工作总结双区BootLoad
    今日把昨天遇到的问题解决了,昨天的问题果然还是在FLASH区刷写上,存在两个问题导致APP1区上刷写的程序不对,第一处问题出现在把APP2程序上的无效空间(如00H-600H,不是程序正常数据,程序地址从600H开始计数,但是KEIL生成的HEX转BIN文件,前600H也有数据虽然都是0,但是在IAP写入过程中需要删掉......
  • GitHub每日最火火火项目(7.10)
    项目名称:public-apis/public-apis项目介绍:这是一个集体列表,包含了各种免费的APIs。它可能为开发者提供了一个方便的资源,使他们能够更容易地找到和使用所需的APIs,从而加速开发进程。通过整合众多的免费APIs,该项目有助于促进开发社区的共享和合作,让开发者能够更高效......
  • 作业7.10
    练习:#include<stdio.h>#include<string.h>charname[100][100]={""};intscore[100]={0};//定义存储学生信息的数组intnum=0;//定义学生个数的变量voidinfo_in();voidinfo_out();voidinfo_max();voidinfo_sort();......