2025
//aoc2025day2pt1
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
char c[100000]={};
LL ans=0;
LL pow_10[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
int main(){
cin>>c+1;
int idx=0;
while(c[idx]!='\0' || idx==0){
LL upp=0,low=0;
while(c[++idx]>=48 && c[idx]<58){
low*=10;
low+=c[idx]-48;
}
while(c[++idx]>=48 && c[idx]<58){
upp*=10;
upp+=c[idx]-48;
}
for(LL i=low;i<=upp;i++){
int digit=to_string(i).size();
if(digit%2==1) continue;
LL f=i/pow_10[digit/2], b=i%pow_10[digit/2];
if(f==b) ans+=i;
}
}
cout<<ans;
return 0;
}
//aoc2025day2pt2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
char c[100000]={};
LL ans=0;
LL pow_10[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
int main(){
cin>>c+1;
int idx=0;
while(c[idx]!='\0' || idx==0){
LL upp=0,low=0;
while(c[++idx]>=48 && c[idx]<58){
low*=10;
low+=c[idx]-48;
}
while(c[++idx]>=48 && c[idx]<58){
upp*=10;
upp+=c[idx]-48;
}
for(LL i=low;i<=upp;i++){
int digit=to_string(i).size();
for(int j=1;j<=digit/2;j++){
bool flag=true;
if(digit%j!=0) continue;
int ori=i%pow_10[j],num=i/pow_10[j];
while(num){
if(num%pow_10[j]!=ori){
flag=false;
break;
}
num/=pow_10[j];
}
if(flag){
ans+=i;
break;
}
}
}
}
cout<<ans;
return 0;
}
//aoc2025day3pt2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
int main(){
long long ans = 0;
long long dp[105][15];
string s;
while(cin >> s,s[0]!='x'){
memset(dp,0,sizeof dp);
for(int i=0;i<100;i++){
if(i==0) dp[i][1]=s[i]-48;
else{
for(int j=1;j<=12;j++){
dp[i][j]=dp[i-1][j];
for(int k=0;k<i;k++){
dp[i][j]=max(dp[i][j],dp[k][j-1]*10+(s[i]-48));
}
}
}
}
ans += dp[99][12];
}
cout<<ans<<endl;
return 0;
}
//AoC 2025 day4 pt2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
int ttt=0;
char c[1005][1005];
int dx[8]={1,1,0,-1,-1,-1,0,1},dy[8]={0,1,1,1,0,-1,-1,-1};
int main(){
for(int i=1;i<=135;i++){
cin>>c[i]+1;
}
int ans;
do{
ans=0;
for(int i=1;i<=135;i++){
for(int j=1;j<=strlen(c[i]+1);j++){
if(c[i][j]=='@'){
int cnt=0;
for(int k=0;k<8;k++){
if(i+dx[k]<=135 && i+dx[k]>=1 && j+dy[k]<=strlen(c[i]+1) && j+dy[k]>=1 && c[i+dx[k]][j+dy[k]]=='@'){
cnt++;
}
}
if(cnt<=3){
c[i][j]='.';
ans++;
}
}
}
}
ttt+=ans;
}while(ans);
cout<<ttt;
return 0;
}
//AoC 2025 day5
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
LL ans;
vector<pair<LL,LL> > v;
int main(){
LL a,b,c;
while(cin>>a>>b,a!=0){
v.push_back({a,b});
}
sort(v.begin(),v.end());
LL l=0,r=-1;
for(auto i:v){
LL ll=i.first, rr=i.second;
if(ll>r){
ans+=r-l+1;
l=ll;
r=rr;
}
else{
r=max(r,rr);
}
}
ans+=r-l+1;
cout<<ans;
return 0;
}
//AoC 2025 day6 pt1
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
LL num[1005][15],ans=0;
char op[1005];
int main(){
for(int i=1;i<=4;i++){
for(int j=1;j<=1000;j++){
cin>>num[j][i];
}
}
for(int i=1;i<=1000;i++){
cin>>op[i];
if(op[i]=='+'){
ans+=num[i][1]+num[i][2]+num[i][3]+num[i][4];
}
else{
ans+=num[i][1]*num[i][2]*num[i][3]*num[i][4];
}
}
cout<<ans;
return 0;
}
//AoC 2025 day6 pt2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
LL ans;
char c[5][10005],op[1005];
int main(){
for(int i=1;i<=4;i++){
cin.getline(c[i]+1,9995);
}
for(int i=1;i<=1000;i++){
cin>>op[i];
}
int idx=1000; LL sum=0;
for(int i=strlen(c[1]+1);i>=1;i--){
LL num=0;
bool flag=true;
for(int j=1;j<=4;j++){
if(c[j][i]==' ') continue;
else{
flag=false;
LL n=c[j][i]-48;
num*=10; num+=n;
}
}
if(flag){
idx--; ans+=sum;
sum=0; continue;
}
if(op[idx]=='+'){
sum+=num;
}
else{
if(sum==0) sum=1;
sum*=num;
}
}
idx--; ans+=sum;
cout<<idx<<" "<<ans;
return 0;
}
//AoC 2025 day7
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
char c[200];
LL ans[200],cnt;
int main(){
cin>>c+1;
for(int i=1;i<=141;i++){
if(c[i]=='S') ans[i]=1;
}
for(int i=1;i<=140;i++){
cin>>c+1;
for(int j=1;j<=141;j++){
if(c[j]=='^' && ans[j]){
ans[j+1]+=ans[j]; ans[j-1]+=ans[j];
ans[j]=0;
}
}
}
for(int i=1;i<=141;i++){
if(ans[i]) cnt+=ans[i];
}
cout<<cnt;
return 0;
}
//AoC 2025 day8 part1
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
struct node{
LL x,y,z;
bool operator < (const node &t) const{
return make_tuple(x,y,z) < make_tuple(t.x,t.y,t.z);
}
}e[1005];
LL getd(node a,node b){
LL c=abs(a.x-b.x)*abs(a.x-b.x)+abs(a.y-b.y)*abs(a.y-b.y);
return c+abs(a.z-b.z)*abs(a.z-b.z);
}
struct dis{
LL di;
int n1,n2;
bool operator < (const dis &t) const{
return di < t.di;
}
};
int fa[1005],cnt[1005];
vector<dis> d;
map<node,int> mp;
int find(int x){
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
int main(){
for(int i=1;i<=1000;i++){
cnt[i]=1;
fa[i]=i;
cin>>e[i].x>>e[i].y>>e[i].z;
mp[e[i]]=i;
}
for(int i=1;i<=1000;i++){
for(int j=i+1;j<=1000;j++){
d.push_back({getd(e[i],e[j]),i,j});
}
}
sort(d.begin(),d.end());
for(int i=0;i<1000;i++){
int tt=cnt[find(d[i].n1)];
cnt[find(d[i].n1)]=0;
fa[find(d[i].n1)]=find(d[i].n2);
cnt[find(d[i].n2)]+=tt;
}
sort(cnt+1,cnt+1001,greater<>());
for(int i=1;i<=1000;i++){
cout<<cnt[i]<<" ";
}
LL ans=1ll*cnt[1]*cnt[2]*cnt[3];
cout<<"\n"<<ans;
return 0;
}
//AoC 2025 day8 part2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
struct node{
LL x,y,z;
bool operator < (const node &t) const{
return make_tuple(x,y,z) < make_tuple(t.x,t.y,t.z);
}
}e[1005];
LL getd(node a,node b){
LL c=abs(a.x-b.x)*abs(a.x-b.x)+abs(a.y-b.y)*abs(a.y-b.y);
return c+abs(a.z-b.z)*abs(a.z-b.z);
}
struct dis{
LL di;
int n1,n2;
bool operator < (const dis &t) const{
return di < t.di;
}
};
int fa[1005],cnt[1005];
vector<dis> d;
map<node,int> mp;
int find(int x){
if(fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
int main(){
for(int i=1;i<=1000;i++){
cnt[i]=1;
fa[i]=i;
cin>>e[i].x>>e[i].y>>e[i].z;
mp[e[i]]=i;
}
for(int i=1;i<=1000;i++){
for(int j=i+1;j<=1000;j++){
d.push_back({getd(e[i],e[j]),i,j});
}
}
sort(d.begin(),d.end());
int id;
for(id=0;id<505000;id++){
int tt=cnt[find(d[id].n1)];
cnt[find(d[id].n1)]=0;
fa[find(d[id].n1)]=find(d[id].n2);
cnt[find(d[id].n2)]+=tt;
if(cnt[find(d[id].n2)]==1000) break;
}
LL ans=1ll*e[d[id].n1].x*e[d[id].n2].x;
cout<<"\n"<<ans;
return 0;
}
//AoC 2025 day9 pt2
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL N = 1e8+5;
const LL mod = 1e6+7;
const double eps = 1e-9;
int n=496;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
LL x[1005],y[1005],vis[5005][5005],ans;
vector<LL> alls;
LL find(int xx){
return lower_bound(alls.begin(),alls.end(),xx) - alls.begin() + 1;
}
void dfs(int xx,int yy){
vis[xx][yy]=2;
for(int i=0;i<4;i++){
if(xx+dx[i]<=alls.size()+1 && xx+dx[i]>=0 && yy+dy[i]<=alls.size()+1 && yy+dy[i]>=0 && vis[xx+dx[i]][yy+dy[i]]==0){
dfs(xx+dx[i],yy+dy[i]);
}
}
}
void dfs2(int xx,int yy){
queue<pair<int,int>> q;
q.push({xx,yy});
while(q.size()){
auto p = q.front();
q.pop();
xx = p.first;
yy = p.second;
if(vis[xx][yy]) continue;
vis[xx][yy] = 2;
for(int i=0;i<4;i++){
int nx = xx + dx[i];
int ny = yy + dy[i];
if(nx < 0 || nx > alls.size()+1 || ny < 0 || ny > alls.size()+1) continue;
q.push({nx,ny});
}
}
}
int main(){
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
alls.push_back(x[i]);
alls.push_back(y[i]);
}
sort(alls.begin(),alls.end());
alls.erase(unique(alls.begin(),alls.end()),alls.end());
for(int i=0;i+1<alls.size();i++){
if(alls[i+1]!=alls[i]+1){
alls.insert(alls.begin()+i+1,alls[i]+1);
i++;
}
}
for(int i=1;i<=n;i++){
int j=(i==n)? 1:i+1;
if(x[i]==x[j]){
for(int p=min(find(y[i]),find(y[j]));p<=max(find(y[i]),find(y[j]));p++){
vis[find(x[i])][p]=1;
}
}
else if(y[i]==y[j]){
for(int p=min(find(x[i]),find(x[j]));p<=max(find(x[i]),find(x[j]));p++){
vis[p][find(y[i])]=1;
}
}
}
dfs2(0,0);
for(int i=0;i<=alls.size();i++){
for(int j=0;j<=alls.size();j++){
if(vis[i][j]==2) vis[i][j]=0;
else vis[i][j]=1;
}
}
// for(int i=0;i<=alls.size();i++){
// for(int j=0;j<=alls.size();j++){
// cout<<vis[j][i]<<" ";
// }
// cout<<endl;
// }
for(int i=1;i<=alls.size();i++){
for(int j=1;j<=alls.size();j++){
vis[i][j]+=vis[i-1][j]+vis[i][j-1]-vis[i-1][j-1];
}
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
LL x1 = min(find(x[i]),find(x[j]));
LL x2 = max(find(x[i]),find(x[j]));
LL y1 = min(find(y[i]),find(y[j]));
LL y2 = max(find(y[i]),find(y[j]));
LL cnt=vis[x2][y2]-vis[x1-1][y2]-vis[x2][y1-1]+vis[x1-1][y1-1];
if(cnt==(x2-x1+1)*(y2-y1+1)) ans = max(ans,(abs(x[i]-x[j])+1)*(abs(y[i]-y[j])+1));
}
}
cout<<ans;
return 0;
}