暑假集训 7月9日
基础数论:
质数(一般用线性筛)
约数
快速幂
组合数
容斥
补题:
C - Bacteria
救命,取栈顶元素没开long long,太可惜了
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+10; priority_queue<ll,vector<ll>,greater<ll> > a; signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for (int i=0; i<n; i++) { ll x; cin>>x; a.push(x); } int flag=1; ll num=0; while (a.size()>1) { ll s=a.top(); a.pop(); ll ss=a.top(); a.pop(); if (ss==s) { a.push(ss*2); } else if (ss!=s) { if (ss%s==0) { ll w=s; while (w<ss) { w*=2; num++; } if (w==ss) { a.push(w*2); } else { flag=0; break; } } else { flag=0; break; } } else { flag=0; break; } } if (!flag)puts("-1"); else cout<<num<<"\n"; return 0; }
F - Tickets
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6+10; int dp[N][30]; int cnt[30]; int judge(int x) { int a=0,b=0; int ver=0; while (x) { int w=x%10; if (ver<=2)a+=w; else b+=w; ver++; x/=10; } int c=abs(b-a); return c; } void cal() { for (int i=0; i<=999999; i++) { int x=i; int c=judge(x); cnt[c]++; dp[i][c]=cnt[c]; } } signed main() { int n; scanf("%d",&n); cal(); while (n--) { int num; scanf("%d",&num); int c=judge(num); int ans=0; for (int i=0; i<c; i++) { int tmp=num; while (dp[tmp][i]==0)tmp--;//没想到,没想到,但是我的方法快了一倍,哈哈哈 ans+=dp[tmp][i]; } printf("%d\n",ans); } return 0; }
my code:嘿嘿
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e6+10; int dp[N][30]; int cnt[30]; int judge(int x) { int a=0,b=0; int ver=0; while (x) { int w=x%10; if (ver<=2)a+=w; else b+=w; ver++; x/=10; } int c=abs(b-a); return c; } void cal() { for (int i=0; i<=999999; i++) { int x=i; int c=judge(x); cnt[c]++; for (int j=0;j<=c;j++) { dp[i][j]=cnt[j]; } } } signed main() { int n; scanf("%d",&n); cal(); while (n--) { int num; scanf("%d",&num); int c=judge(num); ll ans=0; for (int i=0; i<c; i++) { ans+=dp[num][i]; } printf("%d\n",ans); } return 0; }

浙公网安备 33010602011771号