AtCoder ABC142

本來不想發這篇博客的
但是考慮到這是人生中第一次atcoder abc做出5道題
還是忍不住發一波

T1

看到了就很慌
作爲史上做過的最難得abcT1,居然不是像140那種的直接輸出N3N^3
翻譯一下題意,輸出nn\frac{小於n的奇數個數}{n}

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <stack>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define mct(a,b) memset(a,b,sizeof(a))
# define gc getchar()
typedef long long ll;
const int N=1e5+5;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}
int n;
int main()
{
	read(n);
	printf("%lf\n",1.*((n+1)/2)/n);
	return 0;
}

T2

有n個人,每個人有一個身高
問有幾個人身高大於等於k
感覺這道題比上一題簡單

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <stack>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define mct(a,b) memset(a,b,sizeof(a))
# define gc getchar()
typedef long long ll;
const int N=2e5+5;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}
int n,k,ans;
int a[N];

int main()
{
	read(n),read(k);
	Rep(i,1,n)read(a[i]);
	Rep(i,1,n)if(a[i]>=k)ans++;
	printf("%d\n",ans);
	return 0;
}

T3

給一個數組a,按aia_i從小到大排序輸出id

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <stack>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define mct(a,b) memset(a,b,sizeof(a))
# define gc getchar()
typedef long long ll;
const int N=2e5+5;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

int n;
struct node{
	int t,id;
	bool operator < (const node &cmp)const{
		return t<cmp.t;
	}
}a[N];

int main()
{
	read(n);
	Rep(i,1,n)read(a[i].t),a[i].id=i;
	sort(a+1,a+n+1);
	Rep(i,1,n)printf("%d ",a[i].id);
	puts("");
	return 0;
}

T4

這道題…WA了4次
細節處理很多
根據面向數據編程原則
易證:此題答案爲輸出n的質因數個數
證明:略

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <stack>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define mct(a,b) memset(a,b,sizeof(a))
# define gc getchar()
typedef long long ll;
const int N=1e5+5;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

ll a,b;
ll x;
ll ans=1;

int main()
{
	read(a),read(b);
	x=__gcd(a,b);
	for(ll i=2;i*i<=x;i++){
		if(x%i==0)ans++;
		while(x%i==0){
			x/=i;
			if(x==1)break;
		}
	}
	if(x>1)ans++;
	printf("%lld\n",ans);
	return 0;
}

T5

最爲第一次寫出來的T5
還是很值得紀念的
事後發現 這道題其實代碼非常短
但是對於狀壓DP一竅不通的我還是硬着頭皮寫出來了
其實就是個狀壓的板子題
一看數據N12N\leq12,M3000M\leq3000就知道了
fi,jf_{i,j}表示前i把鑰匙開成j狀態的最小花費
其實開一維就可以額,但是由於本人實在是太菜了
所以寫出了一個70多行的程序…

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <stack>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define mct(a,b) memset(a,b,sizeof(a))
# define gc getchar()
typedef long long ll;
const int N=1005;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

int n,m,high;
int ans=INT_MAX;
int a[N],b[N],c[N][20];
int f[N][5005];

inline int Qpow(int base,int ind){
	int res=1;
	while(ind){
		if(ind&1)res*=base;
		base*=base;
		ind>>=1;
	}
	return res;
}

inline int change(int x,int i){
	int num[15],cnt=0;
	memset(num,0,sizeof(num));
	while(x){
		num[++cnt]=x%2;
		x/=2;
	}
	Rep(j,1,b[i])num[c[i][j]]=1;
	int res=0;
	Rep(j,1,n)res+=num[j]*Qpow(2,j-1);
	return res;
}

int main()
{
	memset(f,0x3f,sizeof(f));
	read(n),read(m);
	high=Qpow(2,n)-1;
	f[0][0]=0;
	Rep(i,1,m){
		read(a[i]);
		read(b[i]);
		Rep(j,1,b[i])read(c[i][j]);
		Rep(j,0,high){
			f[i][j]=min(f[i][j],f[i-1][j]);
			int nxt=change(j,i);
			f[i][nxt]=min(f[i][nxt],f[i-1][j]+a[i]);
		}
	}
	Rep(i,1,m)ans=min(ans,f[i][high]);
	if(ans<1e9)printf("%d\n",ans);
	else puts("-1");
	return 0;
}
發佈了41 篇原創文章 · 獲贊 52 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章