标签:print air cout character 自身 begin scan tor 颜色
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
int T, n, a[maxn];
bool cmp(int a, int b){
return a > b;
}
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
sort(a+1, a+1+n, cmp);
int ans = 0;
for(int i = 1; i <= n; i++)
if(a[i] > ans) ans++;
else break;
cout << ans << endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n; scanf("%d", &n);
string s, t, a1="", a2=""; cin >> s >> t;
int diff = 0;
for(int i = 0; i < n; i++)
{
if(s[i] != t[i])
{
diff += 1;
a1 += s[i];
a2 += t[i];
}
}
if(diff != 2) {
puts("No");
return;
}
if(a1[0] == a1[1] && a2[0] == a2[1]) puts("Yes");
else puts("No");
}
int main()
{
int T; scanf("%d", &T);
while(T--) solve();
return 0;
}
hard version在于可以移动多次。
首先判定能不能得到YES。
分析容易发现只有在每个字符在两个字符串中出现的次数为偶数的时候才可以输出YES。
其实对于输出操作步骤就相当于是构造题。
可以发现,字符串是不长的,只有50。
所以暴力扫描一遍,遇到可以让当前字符满足条件的操作就做下来。
也算是一种贪心吧...
#include<bits/stdc++.h>
#define PII pair<int, int>
using namespace std;
int T, n;
void solve()
{
scanf("%d", &n);
string s, t; cin >> s >> t;
vector<PII> op;
for(int i = 0; i < n; i++)
{
if(s[i] != t[i])
{
for(int j = i+1; j < n; j++)
{
if(s[i] == s[j])
{
swap(s[j], t[i]);
op.push_back({j, i});
break;
}
if(s[i] == t[j])
{
swap(s[j], t[j]);
swap(t[i], s[j]);
op.push_back({j, j});
op.push_back({j, i});
break;
}
}
}
}
if(s != t) {
puts("NO");
return;
}
puts("YES");
cout << op.size() << endl;
for(auto x : op)
printf("%d %d\n", x.first+1, x.second+1);
}
int main()
{
scanf("%d", &T);
while(T--) solve();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n; cin>>n;
ll st = 0; ll i;
for(i = 2; i <= n / i; i++)
{
if(n % i == 0) st++;
while(n % i == 0) n /= i;
}
if(st == 0) cout << n << endl; // 如果是素数
else if(st == 1 && n == 1) cout << i-1 << endl;
else cout << 1 << endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n, m, vis[maxn], ans;
set<int> s, g[maxn];
queue<int> q;
void bfs(int x)
{
q.push(x);
vis[x] = 1; s.erase(x);
while(q.size())
{
int t = q.front(); q.pop();
for(set<int>::iterator it = s.begin(); it != s.end();)
{
int tmp = *it++;
//没有边权为1的边相连
//说明是一个权为0的连通块
if(g[tmp].count(t) == 0)
{
s.erase(tmp);
q.push(tmp);
vis[tmp] = 1;
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) s.insert(i);
for(int i = 1, x, y; i <= m; i++)
{
scanf("%d%d", &x, &y);
g[x].insert(y);
g[y].insert(x);
}
for(int i = 1; i <= n; i++)
if(!vis[i]) bfs(i), ans++;
cout << ans-1 << endl;
return 0;
}
Codeforces Round #599 Div2解题报告A-D
标签:print air cout character 自身 begin scan tor 颜色
原文地址:https://www.cnblogs.com/zxytxdy/p/12166238.html