前期题过得还是有点慢,补题待更新
直接数出于是的补就好
#include <bits/stdc++.h>
using namespace std;
int a,b,t;
signed main() {
cin>>t;
while(t--) {
cin>>a>>b;
cout<<(b-a%b)%b<<endl;
}
}
给这些串分个类,很容易发现没类的个数依次是 \(1,2,3,\dots\)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 100005;
int t,n,k;
signed main() {
ios::sync_with_stdio(false);
cin>>t;
while(t--) {
cin>>n>>k;
int pos=1;
while(k>pos) k-=pos, ++pos;
++pos;
int q=k;
for(int i=n;i>=1;--i) cout<<((i==pos||i==q)?‘b‘:‘a‘);
cout<<endl;
}
}
从第一个 \(1\) 之后,将所有的数字倒到另一边
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 100005;
char c[N],a[N],b[N];
int t,n;
signed main() {
ios::sync_with_stdio(false);
cin>>t;
while(t--) {
cin>>n>>c+1;
int fg=0;
for(int i=1;i<=n;i++) {
if(fg==0) {
if(c[i]==‘1‘) {
a[i]=‘1‘;
b[i]=‘0‘;
fg=1;
}
else if(c[i]==‘2‘) {
a[i]=‘1‘;
b[i]=‘1‘;
}
else {
a[i]=‘0‘;
b[i]=‘0‘;
}
}
else {
a[i]=‘0‘;
b[i]=c[i];
}
}
for(int i=1;i<=n;i++) cout<<a[i];
cout<<endl;
for(int i=1;i<=n;i++) cout<<b[i];
cout<<endl;
}
}
如果能二分图染色就输出颜色数,否则就输出 \(3\)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 400005;
int q,n,a[N],c[N],fail;
vector <int> g[N];
void dfs(int p) {
for(int q:g[p]) {
if(c[q]) {
if(c[q]==c[p]) fail=1;
}
else {
c[q]=3-c[p];
dfs(q);
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin>>q;
while(q--) {
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int fg=0;
for(int i=1;i<n;i++) if(a[i]!=a[i+1]) fg=1;
if(a[1]!=a[n]) fg=1;
if(fg==0) {
cout<<1<<endl;
for(int i=1;i<=n;i++) cout<<1<<" ";
cout<<endl;
continue;
}
for(int i=1;i<n;i++) if(a[i]!=a[i+1]) {
g[i].push_back(i+1);
g[i+1].push_back(i);
}
if(a[1]!=a[n]) {
g[1].push_back(n);
g[n].push_back(1);
}
fail=0;
for(int i=1;i<=n;i++) if(c[i]==0) {
c[i]=1;
dfs(i);
}
if(fail) {
cout<<3<<endl;
for(int i=1;i<n;i++) cout<<(i%2)+1<<" ";
cout<<3<<endl;
}
else {
cout<<2<<endl;
for(int i=1;i<=n;i++) cout<<c[i]<<" ";
cout<<endl;
}
for(int i=1;i<=n;i++) {
a[i]=c[i]=0;
g[i].clear();
}
}
}
枚举选择一个中间点,计算把边上压到中间这条线上的答案
压的时候要考虑两边压和单边压的情况
(以下代码中的二分显得很累赘,纯粹为了偷懒而出现)
using namespace std;
#define int long long
const int N = 200005;
int n,k,a[N],pre[N],suf[N],ans=1e18;
map<int,int> mp;
signed main() {
ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++) {
pre[i]=pre[i-1]+a[i];
}
for(int i=n;i>=1;--i) {
suf[i]=suf[i+1]+a[i];
}
for(int i=1;i<=n;i++) mp[a[i]]++;
for(auto i:mp) if(i.second>=k) {
cout<<0<<endl;
return 0;
}
for(int i=1;i<=n;i++) {
int x=a[i];
int e=upper_bound(a+1,a+n+1,x)-lower_bound(a+1,a+n+1,x);
int g=n-(upper_bound(a+1,a+n+1,x)-a)+1;
int l=lower_bound(a+1,a+n+1,x)-a-1;
int sg=suf[n-g+1];
int sl=pre[l];
int tmp=sg-g*x+l*x-sl-(n-k);
ans=min(ans,tmp);
if(n-l>=k) {
int tx=sg-g*x-(n-l-k);
ans=min(ans,tx);
}
if(n-g>=k) {
int tx=l*x-sl-(n-g-k);
ans=min(ans,tx);
}
//cout<<l<<" "<<e<<" "<<g<<endl;
}
cout<<max(0ll,ans);
}
Codeforces Round #629 (Div. 3) 总结
原文:https://www.cnblogs.com/mollnn/p/12579022.html