写在前面
我的码风有时候会比较奇怪,你可能会看到一些奇奇怪怪的define方法,请不要介意,请根据思路走,如果有误或者不懂得地方,可以评论留言,我看到了就会回复。
A. Road To Zero
题目链接:A. Road To Zero
一道比较坑的水题,我刚刚开始题目没有看清楚,停顿了很久,然后仔细看了一遍,结果我就把答案作为longlong类型,WA了一发,全改成longlong就过了。
#include <bits/stdc++.h>
#define int long long
using namespace std;
main()
{
int t;
scanf("%lld",&t);
while(t--){
int x,y,a,b;
int sum=0;
scanf("%lld %lld %lld %lld",&x,&y,&a,&b);
if(b<2*a){
int minn=min(x,y);
int maxn=max(x,y);
sum+=minn*b;
sum+=(maxn-minn)*a;
}
else
{
sum=(x+y)*a;
}
printf("%lld\n",sum);
}
}
B. Binary Period
题目大意
给你一个初始01串s1,然后你可以随意添加让其成为另外一个串s2,s2的长度最多是s1的两倍,即2*len (s1)<=len(s2)。同时需要满足s2是一个由最小长度重复子串构成的01串。
分析
这个题看到这句话
If there are multiple solutions print any one of them.
我们肯定知道这是一个构造题,就去想极限情况,那么我们可以想到,我们可以将情况分为三种:
- 全为1
- 全为0
- 非1非情况
又可以根据是一个构造题,我们可以想到,最短的子序列长度除了1便是2了(这不废话),那么我们就根据他的长度,直接输出101010……,直到2*len的长度,完美,具体看代码。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
string s;
cin>>s;
int l=0,r=0;
for(int i=0; i<s.size(); i++)
{
if(s[i]=='0')
l++;
else
r++;
}
if(l==0)
{
for(int i=0; i<r*2; i++)
printf("1");
printf("\n");
}
else if(r==0)
{
for(int i=0; i<l*2; i++)
printf("0");
printf("\n");
}
else
{
for(int i=0;i<s.size();i++)
{
printf("10");
}
printf("\n");
}
}
return 0;
}
题目链接:C. Yet Another Counting Problem
题目大意: 给你a和b,l,r。问你[l,r]中有多少满足(x%a)%b!=(x%b)%a。
题目分析: 首先肯定不能暴力,然后我们发现a和b的范围很小,此时可以自己想,也可以打表观察,发现一个规律:我们假设LCM=lcm(a,b)(lcm为最小公倍数),我们可以发现nLCM到nLCM+max(a,b)这么多个数肯定是满足条件的,那么我们可以打表计算[1,LCM]中有多少个满足条件的。
然后最后的结果便如下面代码所示。
tip: 我刚刚开始一直没看懂这个函数为啥是这样的,x/LCM*sum[LCM]部分我们可以看出,他是将之前的周期数乘以[1,LCM]中有多少满足条件的数,后面的便是他的剩下来多的数了。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll LCM;
ll sum[400010];
ll cal(ll x)
{
return x/LCM*sum[LCM]+sum[x%LCM];
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,q;
scanf("%d %d %d",&a,&b,&q);
LCM=a/__gcd(a,b)*b;
for(int i=1;i<=LCM;i++)
{
sum[i]=sum[i-1];
if(i%a%b!=i%b%a)
sum[i]++;
}
while(q--){
ll l,r;
scanf("%lld %lld",&l,&r);
//printf("l:%lld\tr:%lld\n",l,r);
printf("%lld ",cal(r)-cal(l-1));
}
printf("\n");
}
}
D. Multiple Testcases
明天再补吧,今天有点累了。
2020.5.1