当前位置: 首页 > news >正文

The 2023 ICPC Asia Taoyuan Regional Programming Contest

The 2023 ICPC Asia Taoyuan Regional Programming Contest(A,B,D,F,H,M)

原题链接:https://codeforces.com/gym/105544

A.Counterfeit Money

思路:根据题意将字符串分割成若干组,每组有三个元素,然后±交替进行的到最后的总和,判断总和是否能被13整除

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;void solve(){ string s;cin>>s;reverse(s.begin(),s.end());    //翻转s更好处理vector<int>vec;for(int i=0;i<s.size();i+=3){       //以3为步长string str=s.substr(i,3);reverse(str.begin(),str.end());       vec.push_back(stoi(str));  }int ok=1,sum=0;for(auto it:vec)if(ok)  sum+=it,ok=0;else sum-=it,ok=1;if(sum%13==0){cout<<abs(sum)<<" "<<"YES"<<endl;}else cout<<abs(sum)<<" "<<"NO"<<endl;}
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int t;cin>>t;while(t--)solve();
}

M. Task scheduler

思路:按照题目所给的排序最后输出排序后的结果

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
typedef pair<int,int>PII;PII a[N];bool cmp(PII a,PII b){if(a.second==b.second) return a.first<b.first;return a.second<b.second;}void solve(){ int n;cin>>n;for(int i=1;i<=n;i++)  cin>>a[i].first;for(int i=1;i<=n;i++)  cin>>a[i].second;sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++)cout<<a[i].first<<" ";cout<<endl;}
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int t;cin>>t;while(t--)solve();
}

H. Bank Deposit Challenge

思路:很裸露的一道01背包板题,需要注意的是处理字符串分割,获取v,w

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
int n,m,f[N]; vector<int>split(string s){istringstream iss(s);vector<int>tokens;string stoken;while(iss>>stoken)tokens.push_back(stoi(stoken));return tokens;   
}   void solve(){ cin>>m;string s;getline(cin,s);getline(cin,s);vector<int>w=split(s);getline(cin,s);vector<int>v=split(s);for(int i=0;i<w.size();i++)for(int j=m;j>=v[i];j--)f[j]=max(f[j],f[j-v[i]]+w[i]);cout<<f[m]<<endl;	   }int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
//	   int t;
//	   cin>>t;
//	   while(t--)solve();
}

B - Recurring Decimal to Fractions

思路:给你一个小于0的小数,一部分是非循环节,一部分是循环节,最后让你求出分子和分母的最简之比

通过数学表示将循环节去掉表示成分数的形式,然后再用gcd求出最大公约数

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;ll gcd(ll a, ll b)
{return b ? gcd(b, a % b) : a;
}void solve()
{ll n, m;cin >> n >> m;ll  b, c;cin >> b >> c;ll fz = b * (pow(10, m) - 1) +c;ll fm = (pow(10, m) - 1) * pow(10, n);ll w = gcd(fz, fm);ll ans1 = fz / w, ans2 = fm / w;cout << ans1 << " " << ans2 << endl;
}int main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int t;cin >> t;while (t--)solve();
}

D. Quarantine Policy

思路:模拟题,跟着题意描述模拟即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N=500;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};     //上下左右四个方向
int dxx[4]={-1,-1,1,1},dyy[4]={-1,1,1,-1};   //左上右上左下右下四个方向void solve() {int t;cin>>t;for (int w=1;w<=t;w++){int n,m,d1,d2;cin>>n>>m>>d1>>d2;vector<vector<char>>vec(n+10,vector<char>(m+10,0));vector<vector<int>>ans(n+10,vector<int>(m+10,0));for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)cin>>vec[i][j];for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (vec[i][j]=='V'){for (int k=0;k<4;k++){int a=i+dx[k],b=j+dy[k];if (a<1||a>n||b<1||b>m)  continue;ans[a][b]=max(ans[a][b],d1);}for (int k=0;k<4;k++){int a=i+dxx[k],b=j+dyy[k];if (a<1||a>n||b<1||b>m)  continue;ans[a][b]=max(ans[a][b],d2);}}cout<<"Airplane #"<<w<<":"<<endl;for (int i=1;i<=n;i++){for (int j=1;j<=m;j++)if (vec[i][j]=='V')  cout<<vec[i][j];else cout<<ans[i][j];cout<<endl;}}}int main()
{ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);// int t;// cin>>t;// while (t--)solve();
}

F - Baker’s Dilemma

思路:耍杂技的牛的问题,两个物品谁在前谁在后可能会对结果造成不同的影响,根据通项推公式得到一个排序方式,则按照这个排序方式执行命令则最后的花费最小

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
typedef struct node{ll id,x,y;  
};
node a[N];bool cmp(node a,node b){if(a.x*b.y==a.y*b.x)  return a.id<b.id;return a.x*b.y<a.y*b.x;   
}void solve(){int n;cin>>n;for(int i=1;i<=n;i++){a[i].id=i;cin>>a[i].x>>a[i].y;		 }sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++)cout<<a[i].id<<" ";cout<<endl;}int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);int t;cin>>t;while(t--)solve();} 

相关文章:

  • C++自动重连机制设计与实现指南
  • 2025ACTF Web部分题解
  • Linux/AndroidOS中进程间的通信线程间的同步 - POSIX IPC
  • 【MongoDB篇】MongoDB的事务操作!
  • LeetCode 1128. 等价多米诺骨牌对的数量 题解
  • C++ STL 基础与多线程安全性说明文档
  • Visual Studio 快捷键更改和设置
  • 使用ip池后,爬虫还被封,是什么原因呢?
  • Zoho在2025:三个支点和一个新故事
  • 数据管理平台是什么?企业应如何做好数据化管理?
  • MySQL数据库中篇
  • 【STM32项目实战】一文了解单片机的SPI驱动外设功能
  • Vue3 中用 canvas 封装抽奖转盘组件:设定中奖概率及奖项图标和名称
  • LeetCode:二叉树的中序遍历
  • 【SpringBoot】SpringBoot中使用AOP实现日志记录功能
  • [HOT 100] 2646. 最小化旅行的价格总和
  • 前景理论——AI与思维模型【95】
  • 量子跃迁:破解未来计算的“时空密码”​
  • 分库分表后复杂查询的应对之道:基于DTS实时性ES宽表构建技术实践
  • enum4linux:渗透测试中的Windows信息收割机!全参数详细教程!Kali Linux教程!
  • 塞尔维亚总统因突发健康问题,中断对美国的正式访问并回国
  • 多地景区发公告称售票达接待峰值,有景区暂停网络和线下售票
  • 五大白酒去年净利超1500亿元:贵州茅台862亿领跑,洋河营收净利齐降
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • 宁波市纪委监委通报4起违反中央八项规定精神典型问题
  • 李铁案二审今日宣判,押送警车已进入法院