ABCDE都挺简单的
CF 1487A
大概意思是说n个人 每个人有个等级 现在可以任意次决斗
同等级的人都不会赢,不同等级的人,高等级的人等级会+1
现在问最终总决斗的获胜者可能有多少个人。
分析:因为同等级必定没有结果 所以我们统计一下最小值
然后统计下比最小值大的值的个数就OK 因为他们可以一直利用min来提高自己的等级
ll a[5000];
signed main(){
ll t;
read(t);
while(t--){
ll n;
read(n);
ll mi=9999;
for(int i=1;i<=n;i++){
//ll x;
read(a[i]);
mi=min(mi,a[i]);
}
ll ans=0;
for(int i=1;i<=n;i++){
if(a[i]>mi){
ans++;
}
}
printf("%lld\n",ans);
}
}
1487 B Cat Cycle
大概意思是:
两个猫A,B 分别移动顺序是n–1 n-- 1 如此循环 1–n 1–n 如此循环
现在每h 都会顺着自己的方式移动一个单位 但是两者在同一个数字时 B猫会向着该点x 向前移动一个单位 现在问 长度为n 经过k (h) 后B猫所在位置
分析:
先令k- - 这样能凑出来 当k=n 的时候好判断一点
我们先观察 n偶数一定是不会出现重叠部分的 偶数直接k%n+1 即可
对于n是奇数 我们发现前n/2个单位是不会重叠的 but 后续部分 每n/2个便会重叠一次 那么对于n k 总额外移位次数就是k+k/(n/2)
signed main(){
ll t;
read(t);
while(t--){
ll n,k;
read(n);
read(k);
k--;
if(n%2==0)
{
printf("%lld\n",k%n+1);
}
else{
printf("%lld\n",(k/(n/2)+k)%n+1);
}
}
}
1487C Minimum Ties
这个题按奇偶模拟就OK
ll s[999][999];
signed main()
{
ll t;
read(t);
while(t--)
{
ll n;
read(n);
memset(s,0,sizeof(s));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
s[i][j]=0;
int hf=(n-1)/2;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=i+hf;j++)
s[i][(j-1)%n+1]=1;
for(int j=i-1;j>=i-hf;j--)
s[i][(j+2*n-1)%n+1]=-1;
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
printf("%lld ",s[i][j]);
printf("\n");
}
return 0;
}
1487D Pythagorean Triples
预处理后二分查询
vector <ll> all;
signed main ()
{
for (int i = 1; 1ll * i * i <= 2000000000; i++)
{
long long x = 1ll * i * i;
if (x & 1)
all.push_back(x + 1 >> 1);
}
ll t;
read(t);
while (t--)
{
ll n;
read(n);
int pos = upper_bound(all.begin(), all.end(), n) - all.begin();
printf("%lld\n", pos - 1);
}
return 0;
}