1. 程式人生 > 其它 >【Vegas原創】免費的FTP軟體Filezilla終極使用方法

【Vegas原創】免費的FTP軟體Filezilla終極使用方法

Codeforces Round #726 (Div. 2)

CF1537A Arithmetic Array

洛谷傳送門
CF1537A


分析

用這 \(n\) 個數的總和 \(sum\) 判斷:

如果 \(sum<n\) 直接用 \(n-sum+1\) 補上即可

如果 \(sum>n\) 意味著要用 \(sum-n\) 個 0 補上


程式碼

#include <cstdio>
#include <cctype>
using namespace std;
int iut(){
	int ans=0,f=1; char c=getchar();
	while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans*f;
}
void print(int ans){
	if (ans>9) print(ans/10);
	putchar(ans%10+48);
}
int main(){
	for (int T=iut();T;--T){
		int n=iut(),sum=0;
		for (int i=1;i<=n;++i) sum+=iut();
		print(sum>=n?(sum-n):1),putchar(10);
	}
    return 0;
} 

CF1537B Bad Boy

洛谷傳送門
CF1537B


分析

要想使三點曼哈頓距離最大,把另外兩點放在對角即可


程式碼

#include <cstdio>
#include <cctype>
using namespace std;
int iut(){
	int ans=0,f=1; char c=getchar();
	while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans*f;
}
int main(){
	for (int T=iut();T;--T){
		int n=iut(),m=iut(); iut(),iut(); 
		printf("1 1 %d %d\n",n,m);
	}
    return 0;
}

CF1537C Challenging Cliffs

洛谷傳送門
CF1537C


分析

首先第一個數和最後一個數可以先確定下來。

如果把剩下的數直接在中間升序排列,下界為 \(n-3\)

其浪費了第一個數和最後一個數所相鄰的位置。

那麼如果以 \((pos,n]\)\([1,pos]\) 排列,就可以達到 \(n-2\) 的下界


程式碼

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
int n,a[200011];
int iut(){
	int ans=0,f=1; char c=getchar();
	while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans*f;
}
int main(){
	for (int T=iut();T;--T){
		n=iut();
		for (int i=1;i<=n;++i) a[i]=iut();
		sort(a+1,a+1+n);
		if (n==2) printf("%d %d\n",a[1],a[2]);
		else{
			int pos=1;
			for (int i=2;i<n;++i)
			    if (a[i+1]-a[i]<a[pos+1]-a[pos]) pos=i;
			for (int i=pos+1;i<=n;++i) printf("%d ",a[i]);
			for (int i=1;i<=pos;++i) printf("%d%c",a[i],i==pos?10:32);
		}
	}
    return 0;
}

CF1537D Deleting Divisors

洛谷傳送門
CF1537D


分析

考慮一個奇數減去一個因子,會變成偶數,然後其又會變成奇數。
最後變為質數或 1 時終止,發現奇數時後手必勝。
同時含有奇質因子的偶數一定先手必勝。
剩下 2 的冪次方通過指數的奇偶性判斷是否先手必勝。


程式碼

#include <cstdio>
#include <cctype>
using namespace std;
int n,c;
int iut(){
	int ans=0,f=1; char c=getchar();
	while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans*f;
}
int main(){
	for (int T=iut();T;--T){
		n=iut(),c=0;
		if (n&1) {puts("Bob"); continue;}
		while (!(n&1)) n>>=1,++c;
		if (n>1) puts("Alice");
		    else puts(c&1?"Bob":"Alice");
	}
    return 0;
} 

CF1537E2 Erase and Extend (Hard Version)

洛谷傳送門
CF1537E2


分析

答案肯定是一段字首重複好多次的結果,設當前選中的字首長度為 \(ans\)
列舉新的字首長度 \(i\),判斷末位大小,如果 \(s[i-1]<s[(i-1)%ans]\)
直接將 \(i\) 作為新的 \(ans\),如果大於直接退出即可


程式碼

#include <cstdio>
#include <cstring> 
using namespace std;
int n,m,ans; char s[500011];
int main(){
	scanf("%d%d%s",&n,&m,s),ans=1;
	for (int i=1;i<n;++i)
	if (s[i]>s[i%ans]) break;
	    else if (s[i]<s[i%ans]) ans=i+1;
	for (int i=0;i<m;++i) putchar(s[i%ans]);
	return 0;
}

CF1537F Figure Fixing

洛谷傳送門
CF1537F


程式碼(分析在上篇題解中)

#include <cstdio>
#include <cctype>
using namespace std;
const int N=200011; long long s[2];
struct node{int y,next;}e[N<<1];
int v[N],a[N],n,m,flag,et,as[N];
int iut(){
	int ans=0,f=1; char c=getchar();
	while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
	while (isdigit(c)) ans=ans*10+c-48,c=getchar();
	return ans*f;
}
bool dfs(int x){
	bool flag=1; s[v[x]]+=a[x];
	for (int i=as[x];i;i=e[i].next)
	if (v[e[i].y]==v[x]) flag=0;
	    else if (v[e[i].y]==-1) v[e[i].y]=v[x]^1,flag&=dfs(e[i].y);
	return flag;	
}
int main(){
	for (int T=iut();T;--T){
		n=iut(),m=iut(),flag=et=1;
		for (int i=1;i<=n;++i) a[i]=iut(),v[i]=-1;
		for (int i=1;i<=n;++i) a[i]=iut()-a[i];
		for (int i=1;i<=m;++i){
			int x=iut(),y=iut();
			e[++et]=(node){y,as[x]},as[x]=et;
			e[++et]=(node){x,as[y]},as[y]=et;
		}
		for (int i=1;i<=n;++i)
		if (v[i]==-1){
			v[i]=s[0]=s[1]=0;
			bool now=dfs(i);
			if (now&&(s[0]!=s[1])) {puts("NO"),flag=0; break;}
			if (!now&&((s[0]^s[1])&1)) {puts("NO"),flag=0; break;}
		}
		for (int i=1;i<=n;++i) as[i]=0;
		if (flag) puts("YES");
	}
    return 0;
}