标签:ons i+1 user 端点 href main variables 思路 应该
输入ABC
则输出ARC
,输入ARC
则输出ABC
给定\(n,k\), 接下来\(k\)组数据, 每组数据第一行一个数\(k_i\)表示接下来的一行包含\(k_i\)个\(1\)至\(n\)的数, 统计\(1\)至\(n\)之间从未出现的数的个数
有n个天文台, 高度为h, m条路径, 统计符合以下条件的天文台数量: 与该天文台有直接相连的路径的天文台高度均低于它.
对于一条路径两端的两个天文台, 其中高度较低的一定不需要统计, 故对每条路径排除掉较低的端点, 注意高度相等时两个端点都应该排除
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int N=100010;
int h[N];
bool flag[N];
int main(){
int n,m;cin >> n >> m;
for(int i=1;i<=n;i++)cin >> h[i];
while(m--){
int a,b ;cin >> a >> b;
if(h[a]==h[b])flag[a]=flag[b]=1;
flag[h[a]>h[b]?b:a]=1;
}
int ans=0;
for(int i=1;i<=n;i++)if(!flag[i])ans++;
cout << ans << endl;
return 0;
}
已知\(X\), 求一组\(A,B\) 满足\(A^5-B^5=X\), 解一定存在
易知, 当\(|A|\)越大,\(|A-B|\)会接近\(1\), 注意到\(X<10^9\),有\(-300<A,B<300\), 因此枚举即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
int main(){
ll x;cin >> x;
for(int i=-300;i<=300;i++)
for(int j=-300;j<=300;j++){
ll m=i*i,n=j*j;
if(m*m*i-n*n*j==x){
cout << i << " " << j << endl;
return 0;
}
}
return 0;
}
给定数组\(A_i\), 求满足\(|i-j|=A_i+A_j\)的数对个数
设\(j>i\), 等式变成\(j-A_j=A_i+i\), 统计\(j-A_j\)个数, 依次加上\(A_i+i\)的个数即可, 由于要满足\(j>i\), 每次需减少一个\(i-A_i\)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int N=200020;
int a[N];
int main(){
int n;cin >> n;
map<int,int> mp;
for(int i=1;i<=n;i++){
cin >> a[i];
mp[i-a[i]]++;
}
ll ans=0;
for(int i=1;i<=n;i++){
mp[i-a[i]]--;
ans+=mp[i+a[i]];
}
cout << ans << endl;
return 0;
}
给定三个数\(A,B,C\),有三种操作:
问能否在保证三个数都非负的条件下进行\(n\)次操作,如果可以输出每次操作加一的那个
代码地址: https://atcoder.jp/contests/abc166/submissions/12816649
作者: jintiandun
模拟: 优先较小的数加一,如果两数相等,优先下一步要用的数加一
#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int N=100020;
int v[3],p[N],q[N];
int main(){
int n;cin >> n;
string s;
for(int i=0;i<3;i++)cin >> v[i];
for(int i=1;i<=n;i++){
cin >> s;
p[i]=s[0]-‘A‘;
q[i]=s[1]-‘A‘;
}
for(int i=1;i<=n;i++){
if(v[p[i]]>v[q[i]])swap(p[i],q[i]);
else if(v[p[i]]==v[q[i]])
if(i<n&&(q[i]==q[i+1]||q[i]==p[i+1]))swap(p[i],q[i]);
if(!v[q[i]])return 0*printf("No\n");
v[p[i]]++,v[q[i]]--;
}
puts("Yes");
for(int i=1;i<=n;i++) printf("%c\n",‘A‘+p[i]);
return 0;
}
【解题报告】AtCoder Beginner Contest 166
标签:ons i+1 user 端点 href main variables 思路 应该
原文地址:https://www.cnblogs.com/nznd0819/p/12839862.html