Everyone Loves Tres
依然是来自AI的翻译QWQ:
这道题似乎可以分成奇数和偶数找规律QWQ:
奇数:
- 首先1和3肯定都是-1;
- 从第五项开始,先是(项数-4)个3 加上6366;
偶数:
- 除了最后两位是66,其它都是33;
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
if(n%2==0){
for(int i=1;i<=n/2-1;i++){
cout<<"33";
}
cout<<"66"<<endl;
}
else{
if(n==1 || n==3) cout<<"-1"<<endl;
else{
for(int i=1;i<=n-4;i++){
cout<<"3";
}
cout<<"6366"<<endl;
}
}
}
return 0;
}
P10904 [蓝桥杯 2024 省 C] 挖矿
唔……还是分情况考虑啊;
从0出发有两种可能:是往左走还是往右走呢
走着走着又会出现问题:是一直认准一个方向走到头呢还是要掉头往回走呢
所以整体上可以先分两种情况(向左走还是向右走),最后可以比较大小选择最小值QWQ
#include <bits/stdc++.h>
using namespace std;
const long long N=2e6+8;
long long R[N]={0},L[N]={0},sR[N]={0},sL[N]={0};
int main()
{
long long n,m;
long long a,f=0;
long long ans1=0,ans2=0,ans;
cin>>n>>m;
for(long long i=1;i<=n;i++){
cin>>a;
if(a>0) R[a]++;
else if(a<0) L[-a]++;
else f++;
}
for(long long i=1;i<=m;i++){
sL[i]=sL[i-1]+L[i];
sR[i]=sR[i-1]+R[i];
}
for(long long i=1;i<=m;i++){
if(m-2*i>0)
ans1=max(ans1,sL[i]+sR[m-2*i]);
else
ans1=max(ans1,sL[i]);
}
for(long long i=1;i<=m;i++){
if(m-2*i>0)
ans2=max(ans2,sR[i]+sL[m-2*i]);
else
ans2=max(ans2,sR[i]);
}
ans=max(ans1,ans2)+f;
cout<<ans;
return 0;
}
P7909 [CSP-J 2021] 分糖果
这道题好难过QAQ 开始提交了好几次都TLE了WAW
事实上可以换一个想法:
把小朋友个数当作一轮,只要上界和下界之间岔开至少一轮,那么奖励数一定等于n-1;
如果上界和下界处于同一轮,那么一定是取上界拿到的糖果最多;
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,L,R,max=0,ans;
cin>>n>>L>>R;
if(L/n==R/n) ans=R%n;
else ans=n-1;
cout<<ans;
return 0;
}
P6625 [省选联考 2020 B 卷] 卡牌游戏
用前缀和呢;
如果前缀和>0就加上QWQ
#include <bits/stdc++.h>
using namespace std;
const long long N=2e5+10;
long long a[N]={0},s[N]={0};
int main()
{
long long n,sum=0;
cin>>n;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
for(long long i=1;i<=n;i++){
s[i]=s[i-1]+a[i];
if(i>=2 && s[i]>0) sum+=s[i];
}
cout<<sum;
return 0;
}