A 2090 virus

签到题
cpp
#include<bits/stdc++.h>
using namespace std;
int t;
int main()
{
cin>>t;
while(t--)
{
string s;
cin>>s;
if(s.size()==8&&
(s[0]!='e'&&s[0]!='i'&&s[0]!='o'&&s[0]!='u'&&s[0]!='a')&&
(s[2]!='e'&&s[2]!='i'&&s[2]!='o'&&s[2]!='u'&&s[2]!='a')&&
(s[4]!='e'&&s[4]!='i'&&s[4]!='o'&&s[4]!='u'&&s[4]!='a')&&
(s[6]!='e'&&s[6]!='i'&&s[6]!='o'&&s[6]!='u'&&s[6]!='a')&&
(s[1]=='e'||s[1]=='i'||s[1]=='o'||s[1]=='u'||s[1]=='a')&&
(s[3]=='e'||s[3]=='i'||s[3]=='o'||s[3]=='u'||s[3]=='a')&&
(s[5]=='e'||s[5]=='i'||s[5]=='o'||s[5]=='u'||s[5]=='a')&&
(s[7]=='e'||s[7]=='i'||s[7]=='o'||s[7]=='u'||s[7]=='a')){
cout<<"Suspected Virus"<<endl;
}else{
cout<<"Well-Being"<<endl;
}
}
return 0;
}
E Permutation Evaluation

签到题,统计每个位置的元素的加减次数
cpp
#include<bits/stdc++.h>
using namespace std;
long long n,tot;
long long a[200010],b[200010];
int main()
{
tot=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
tot+=(-1)*a[i]*(n+1-i)+a[i]*i;
}
cout<<tot;
return 0;
}
F Permutation Generation

刚开始感觉很神秘,搓了一会发现自己忘记了带模加减法的性质,即如果对整个排列的每个元素同时加上同一个数,那么 \(f(p)\) 的值不变。
所以对除了 \(p_k\) 之外的每个数,加上必要的处理中出现的差值 \(d=(x-ak+n)%n\),即可还原为原来的 \(f(p)\) 。
cpp
#include<bits/stdc++.h>
using namespace std;
int n,k,x;
int a[200010];
int main()
{
cin>>n>>k>>x;
for(int i=0;i<n;i++) cin>>a[i];
int d=(x-a[k]+n)%n;
for(int i=0;i<n;i++) cout<<(a[i]+d)%n<<' ';
return 0;
}
G Precision Error?!

很有意思的一道题目!
想法也很粗暴,感觉不是很像正解的样子,但是神奇的满足了所有性质。
在空间中,我们可以取z=0、z=1两个平面,A,B组点分别位于这两个面上,每组n个点。
对于每个点 \(i\) ,\(xy\) 坐标为
\(i/10\*0.011,i \\bmod 10\*0.011,0) \\
同理,对于B组点构造:
\(i/10\*0.011,i \\bmod 10\*0.011,1) \\
而后证性质
- 对于组内的每个元素,最大距离为 \(0.099=1-\epsilon\) ,不满足条件,故不会进入统计范围
- 对于组外的两个元素,最大距离为 1.009=1+\\epsilon ,满足条件,最小距离为1 。故每个点都可满足条件。
代码如下:
cpp
#include<bits/stdc++.h>
using namespace std;
int t,n;
int main()
{
cin>>t;
cout << fixed << setprecision(10);
while(t--)
{
cin>>n;
cout << 2 * n << endl;
int r,c;
for(int i=0;i<n;i++)
{
r=i/10;
c=i%10;
cout<<r*0.011<<' '<<c*0.011<<' '<<1.000000000<<endl;
}
for(int i=0;i<n;i++)
{
r=i/10;
c=i%10;
cout<<r*0.011<<' '<<c*0.011<<' '<<0.000000000<<endl;
}
}
return 0;
}