H 一起画很大的圆!
看起来像是一道计算几何的题,实际上通过分析和猜想,是有O1复杂度的结论的。具体证明略,结论是三点越接近共线,得出的半径越大。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
typedef pair<int, int> PII;
const int N = 1e6+7;
const int mod = 998244353;
int n, m, k;
// int a[N];void sovle()
{int a,b,c,d;cin>>a>>b>>c>>d;if(b-a>d-c){cout<<a<<' '<<d<<endl;cout<<a+1<<' '<<d<<endl;cout<<b<<" "<<d-1<<endl;}else{cout<<b<<' '<<d<<endl;cout<<b<<' '<<d-1<<endl;cout<<b-1<<' '<<c<<endl;}
}signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int ING = 1;cin>>ING;while (ING--){sovle();}return 0;
}
C 字符串外串
首先我们找k的下界,通过D题我们可以知道,k与两个相同字母之间的间隔距离有关,那么想要最小化相隔距离,我们就要尽量地填充不一样的字母,但是每26个字母之后必定会出现相同的字母,那么不难推出来下界就是max(0,n-26),上界很容易知道是n-1。
想要构造出特定可爱值的字符串,就类似与构造出一个特殊的回文串。我的代码太屎了,移步官方题解吧。。。。原本我是想着b到z循环m-1次,然后放两个aa,构造出m可爱值的前缀串,后面再接n-m-1个不同的字符就好了。后面发现n-m-1可能会大于m-1导致可爱值变大。于是我发现了n-m>m时构造会不一样,这种情况的具体构造可以变成回文串,前n-m个和后n-m个对称,中间n-2m个相等的就好了。实现起来乱七八糟额
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
typedef pair<int, int> PII;
const int N = 1e6+7;
const int mod = 998244353;
int n, m, k;
// int a[N];void sovle()
{// string x="abcdefghijklmnopqrstuvwxzzzzxwvutsrqponmlkjihgfedcba";cout<<x.size()<<endl;cin>>n>>m;if(n==m||n-26>m){cout<<"NO"<<endl;return;}cout<<"YES"<<endl;string s;if(n-m>m){char ch='b';for(int i=0;i<m-1;i++) s.push_back(ch),ch++;s.push_back('a');for(int i=m;i<n-m;i++) s.push_back(ch),ch++;if(n>1&&m!=0) s.push_back('a');ch='b'+m-2;for(int i=n-m+1;i<n;i++) s.push_back(ch),ch--;// if(n>1&&m!=0) s.push_back('a');cout<<s<<endl;return;}char ch='a';for(int i=0;i<n-m-1;i++) s.push_back(ch),ch++;for(int i=n-m-1;i<=m;i++) s.push_back('z');ch='a'+n-m-2;for(int i=m+1;i<n;i++) s.push_back(ch),ch--;cout<<s<<endl;
}signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int ING = 1;cin>>ING;while (ING--){sovle();}return 0;
}