cf练习01

C - Arena
题解:比赛可以进行100^500次,换句话说就是 第 i 名只要可以打赢一个人,就可以一直跟他打,所以结论也很明显:有比 a[ i ] 小的数,第i个人就能赢
代码:

#include<bits/stdc++.h>

using namespace std;

const int N=1000010;
int a[N];

void Test(){
	int n;
	cin>>n;
	int res=0x3f3f3f3f;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		res=min(a[i],res);
	}
	int cnt=0;
	for(int i=1;i<=n;i++) 
	if(a[i]!=res) cnt++;
	cout<<cnt<<"\n";
}

int main(){
	ios::sync_with_stdio(false);
	
	int t;
	cin>>t;
	while(t--)
	Test(); 
} 

E - Minimum Ties
题解:如果人数 n 是奇数,就代表每个人都要进行偶数场比赛,可以一半比赛赢,一半比赛输,既保证了得分相同,又没有平局;如果 n 是偶数,每个人就要进行奇数场比赛,如果想要得分相同,每个人就必须有一场是平局。如果能发现这个规律,模拟起来就非常简单了。
代码:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int main() {
	ios::sync_with_stdio(false);
	int t;
	cin>>t;
	while(t--) {
		int n;
		cin>>n;
		if(n%2) {
			for(int i=1; i<n; i++) {
				int flag=1;
				for(int j=i+1; j<=n; j++) {
					cout<<flag<<" ";
					flag*=-1;
				}
			}
		} else {
			for(int i=1; i<=n/2; i++) {
				cout<<"0 ";
				int flag=1;
				for(int j=1; j<=n*2-i*4; j++) {
					cout<<flag<<" ";
					flag*=-1;
					if(j==(n-i*2)) flag*=-1;
				}
			}
		}
		cout<<"\n";
	}
}

F - Cat Cycle
题解:首先看到 n k的范围是1e9,就能直接排除暴力,可以发现:
如果 n 是偶数,两只猫就会各走各的,不会有重合的情况,答案就是 k%n ,要处理一下k%n==0的情况,这个时候答案是n;
如果n是奇数,b猫就会每隔 n/2 步就会多走一步,所以就要判断出k步中有多少个(n/2),这里有一个特殊情况当k%(n/2)==0时,这个时候他实际多走了 k/(n/2)-1 步(手动模拟一下),其他情况就是 k/(n/2);
代码:

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int main(){
	ios::sync_with_stdio(false);
	int t;
	cin>>t;
	while(t--){
		ll n,k;
		cin>>n>>k;
		if(k<=n/2) cout<<k<<endl;
		else if(n%2==0) cout<<(k%n==0?n:k%n)<<"\n";
		else{
			ll x=n/2;
			if(k%x==0) k+=k/x-1;
			else k+=k/x;
			cout<<(k%n==0?n:k%n)<<"\n";
		}
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值