每日一题 饿饿 饭饭2
饿饿 饭饭2 - 题目 - Daimayuan Online Judge
思路很简洁,我却没有想到,太菜了,还是要继续练思维!!!!!!
判断这n个数经过无数次操作后能否相等,其实也就暗示了可以在初始状态下手,如果n个数到最后相等了,那说明他们都是有相同的2和3的个数,那只要在初始状态下把每个数都除以2或3直到不能除为止,最后判断这n个数是否相等就可以了
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+5;
ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
ll t,n,a[200005];
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
while(a[i]%2==0) a[i]/=2;
while(a[i]%3==0) a[i]/=3;
}
bool flag=1;
for(int i=2;i<=n;i++)
if(a[i]!=a[i-1]){
flag=0;break;
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
子串分值和
P1523 - [蓝桥杯2020初赛] 子串分值和 - New Online Judge (ecustacm.cn)
朴素的暴力能过一半,树状数组优化一下能过60%,正解是找规律,,,
对于字符串ababc计算每个字符的贡献
第一个字符 a
从第一个字符开始 a,ab,aba,abab,ababc
第二个字符 b
从第二个字符开始 b,ba,bab,babc
从第一个字符开始 ab,aba,abab,ababc
第三个字符 a
从第三个字符开始 a,ab,abc
从第二个字符开始 ba,bab,babc
与第一个字符重复了,不能再算贡献了
第四个字符 b
从第四个字符开始 b,bc
从第三个字符开始 ab,abc
与第二个字符重复往前的都不能算了
第五个字符c
从第五个字符开始 c
从第四个字符开始 bc
从第三个字符开始 abc
从第二个字符开始 babc
从第一个字符开始 ababc
(1条消息) 2020蓝桥杯C/C+ B组 H题:子串分值和(含详细解释,一看就会)_月初XH的博客-CSDN博客_c 子串分值和
#include <bits/stdc++.h>
#define ll long long
#define lowbit(a) (a&(-a))
using namespace std;
const int mod=1000003;
const int inf=0x3f3f3f3f;
ll qpow(ll a,ll b){
ll res=1;
while(b){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
ll getinv(ll a,ll mod){return qpow(a,mod-2);}
ll ans=0,last[30],n,t[100005];
char s[100005];
int main(){
// freopen("in.txt","r",stdin);
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++){
ans+=(n-i+1)*(i-last[s[i]-'a']);
last[s[i]-'a']=i;
}
printf("%lld",ans);
return 0;
}
平面切分
最后的面数等于直线数加点数,而这个点数统计的时候要注意第i条直线与前i-1条直线求焦点的时候统计的是不重复点的个数
(1条消息) 蓝桥杯2020年第十一届省赛真题-I题-平面切分详细注释_shan1956的博客-CSDN博客
P1524 - [蓝桥杯2020初赛] 平面切分 - New Online Judge (ecustacm.cn)
#include <bits/stdc++.h>
#define ll long long
#define lowbit(a) (a&(-a))
using namespace std;
const int mod=1000003;
const int inf=0x3f3f3f3f;
ll qpow(ll a,ll b){
ll res=1;
while(b){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
ll getinv(ll a,ll mod){return qpow(a,mod-2);}
double a[1005],b[1005];
ll ans=1,n;
pair<double,double>zx;
set<pair<double,double> >s;
void cal(double k,double jj){
set<pair<double,double> >jd;
for(auto i=s.begin();i!=s.end();i++){
if(k!=i->first){
double x=(jj-i->second)/(i->first-k);
double y=k*x+jj;
jd.insert({x,y});
}
}
ans+=jd.size();
}
int main(){
//freopen("in.txt","r",stdin);
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i],&b[i]);
ll m=s.size();
s.insert({a[i],b[i]});
if(m!=s.size()){
ans++;
cal(a[i],b[i]);
}
}
printf("%lld\n",ans);
return 0;
}