7.22 杭电杯多校联赛第二场

1002

题意

输入C++语句生成元组的语句, 转换成python对应的结果元组。

思路

设置一个标记数组,遍历字符数组,只保留 '('    ')'   ','  和数字  其它字符标志设置为0,输出时pass即可

代码

1003

题意

给定数组长度n,操作q次,输入数组a1-an, 接下来输入q次操作op,op为1则还要输入l,r, 表示在数组位置r后面,将l-r这一段复制一次, op为2则还要输入位置pos, 表示当前pos位置的数要参与异或运算,最后输出累计异或的结果。

思路

暴力模拟

代码

#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;

int t;
int n,op,q;
int a;
int l,r;
int pos;
int ans;

vector<int>x;
vector<int>b;

int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>q;
		for(int i=0;i<n;i++){
			cin>>a;
			x.push_back(a);			
		}
		
		while(q--){
			cin>>op;
			if(op==1){
				cin>>l>>r;
				auto it = x.begin();
				int i;
				for(it = x.begin(), i=1; it != x.end(); it++, i++)
					if(i>=r && i<=l+r) x.insert(it+1, x[i-r+l-1]);  //模拟在r之后复制l-r这一段
					
			}
			
			if(op==2){
				cin>>pos;
				ans = (ans) ^ (x[pos]);  //计算异或和
			}
		}
		
		cout<<ans<<endl;  //输出结果
	}
	
    return 0;
}

1012

题意

见代码注释

思路

见代码注释

代码

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

const int INF=0x3f3f3f3f;
typedef long long ll;

int T;
ll n;
ll ans;
int f[1005];

// 题意:给定n 可以在每天存一次钱 每次存7元 或31元 或365元 问最少几天你可以恰好存到n元 如果无法恰好存到  输出-1

// 思路:先暴力打表看一下大概的结果  通过结果发现  存不到的情况只在n=365以内会出现
// 那么我们就可以把n从0 到 2*(365-1) 的结果先暴力计算出 存到f数组里
// 然后判断n 如果n<2*(365-1) 直接输出结果 否则 我们可以先拿出k = n/365-1个365来 那么剩下的nn=n%365 + 365 一定位于365-729之间
// 然而位于365-729之间的都已经计算出最小结果了 所以说在那个最小结果的基础上再拿k个365一定是n对应的最小结果
// 最终的n对应的最小结果 = 剩下的nn对应的最小结果(f[nn]) + 拿出了几个365 (k)

int main()
{
	for(int i=1;i<=729;i++){ //暴力
		int ans=INF;
		for(int a=0;a<=729/7;a++)
			for(int b=0;b<=729/31;b++)
				for(int c=0;c<=729/365;c++)
					if(7*a+31*b+365*c==i)
						ans=min(ans,a+b+c);
						
		if(ans == INF) f[i]=-1;
		else f[i] = ans;
	}

   	scanf("%d",&T);
   	while(T--)
	{
	   	scanf("%lld",&n);
	   	
		if(n<=729) cout<<f[n]<<endl;  //如果n在2*365之内直接输出结果
		
		else{  // 否则的话拿 n/365 -1 个 365 出来 作为结果一部分  剩下n%365+365要凑
			ans=n/365-1;
			n=n%365+365;  //剩下的一定在 365到365+364之间 通过打表可以发现在这之间的n都有结果
			cout<<f[n] + ans<<endl; //那么最小结果一定是那时的最小结果 + 再拿几个365
		}
	}
    return 0;
}

1007

题意

输入区间, 表示的是时间, 问按照时间顺序排列,在时间区间出现重叠之前,有多少个区间是有效的,(重叠以后出现的区间都是无效的)。比如给定(1,4)  (5,7)  (6,9) (11,25)显然按照区间开始的时间顺序,前两个区间都不会重叠, 而第三个区间会和第二个重叠,所以有效区间之只有前两个。

思路

按照区间左端点排序, 观察下一区间的左端点的位置来判断是否重叠。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GTTwelve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值