以下是acwing第121场比赛的abc三题
比赛地址 :
A. AcWing 5149. 简单计算
题目链接 :
思路 :
直接模拟,用floor()函数来实现下取整
代码
cpp
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
using namespace std;
typedef long long LL;
int gcd(int a,int b){ return b==0 ? a : gcd(b,a%b); }
int lcm(int a,int b){ if(a==0||b==0) return 0; return (a*b)/gcd(a,b); }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
//numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end()); // 去重操作
const int N = 2e5+10;
inline void solve(){
int x,y,z; cin>>x>>y>>z;
int ans = floor(1.0 * (z-y) / x) *x + y;
cout << ans << endl;
}
int main()
{
IOS
int _;
cin >> _;
// _ = 1;
while(_ --) solve();
return 0;
}
B. 5150.顶牛
题目链接 :
思路 :
如果没出现a[i][j] = 1 || a[i][j] = 3,那么代表i牛是满足题目条件的;
这样模拟即可!
代码 :
cpp
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
using namespace std;
typedef long long LL;
int gcd(int a,int b){ return b==0 ? a : gcd(b,a%b); }
int lcm(int a,int b){ if(a==0||b==0) return 0; return (a*b)/gcd(a,b); }
bool is_prime(int x){if(x<2) return false;
for(int i=2;i<=x/i;i++) if(x%i==0) return false; return true;}
//numbers.erase(std::unique(numbers.begin(), numbers.end()), numbers.end()); // 去重操作
const int N = 105;
int n,a[N][N];
inline void solve(){
int ans = 0;
vector<int> res;
cin >> n;
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];
for(int i=1;i<=n;i++){
bool tag = true;
for(int j=1;j<=n;j++){
if(a[i][j]==1 || a[i][j]==3){
tag = false;
break;
}
}
if(tag){
res.push_back(i);
ans ++;
}
}
cout << ans << endl;
for(int num : res) cout << num << " ";
return ;
}
int main()
{
IOS
int _;
// cin >> _;
_ = 1;
while(_ --) solve();
return 0;
}
C. 5151.程序调用
原题链接 :
思路 :
用hsah表实现模拟,否则会超时!!!
代码 :
cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5+144;
LL n, m, k,a[N],ans;
unordered_map<LL,LL> mp;
void swap(int &x,int &y){
int tmp = x;
x = y;
y = tmp;
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]] = i;
}
for(int i=1;i<=m;i++){
int b ; cin>>b;
if(mp[b]%k==0) ans += mp[b]/k;
else ans += mp[b]/k+1;
int idx = mp[b];
if(idx==1) continue;
int beforeNum = a[idx-1];
swap(a[idx-1],a[idx]);
swap(mp[b],mp[beforeNum]);
}
cout << ans << endl;
return 0;
}