2018ccpc女生赛 复现

这次换了编译器,用Dev C++写的。
F

#include <bits/stdc++.h>
using namespace std;

int a[520], b[520];
int n,m;
int cnt=1;
int main(){
 int T;
 scanf("%d", &T);
 while(T--){
  int mina=65550,minb=65550;
  scanf("%d%d",&n,&m);
  for(int i=0;i<n;i++)
  {
   scanf("%d",&a[i]);
   mina=min(mina,a[i]);
  }
  if(m)
  {
   for(int i=0;i<m;i++)
   {
    scanf("%d",&b[i]);
    minb=min(b[i],minb);
   }
  }
  printf("Problem %d:\n",cnt+1000);
  printf("Shortest judge solution: %d bytes.\n",mina);
  if(m)
   printf("Shortest team solution: %d bytes.\n",minb);
  else
   printf("Shortest team solution: N/A bytes.\n");
  cnt++;
 }
} 

K

#include <bits/stdc++.h>
using namespace std;

int main(){
	int T;
	scanf("%d", &T);
	while(T--){
		int rank; 
		cin>>rank;
		string name;
		cin>>name;
		int prob;
		cin >>prob;
		string state;
		cin>>state;
		int p;
		if(state == "Running"){
			cin>>p;
		}
		if(state =="FB"){
			state = "AC*"; 
		}
		
		int tmp = 100;
		bool flag = 0;
		for(int i = 1; i <= 3; i++){
			if (rank >= tmp){
				flag = 1;
				printf("%d", rank/tmp);
				rank = rank - int(rank/tmp) * tmp;
			}
			else if(!flag)
				cout<<' ';
			else 
				cout<<'0';
			tmp =tmp /10;
		}
		//cout<<setiosflags(ios::left)<<setw(3)<<rank;
		
		cout<<'|';
		
		cout<<setiosflags(ios::left)<<setw(16)<<name;
		cout<<'|';
		
		cout<<prob;
		
		cout<<'|'<<'[';
		if(state != "Running"){
			cout<<"    ";
			cout<<setiosflags(ios::left)<<setw(6)<<state;
		}
		else{
			for(int i=1; i<=p; i++)
				cout<<'X';
			for(int i=p+1; i<=10; i++)
				cout<<' ';				
		}
		cout<<']'<<endl;
	}
	return 0;
} 

H

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int t,n;
string a;
int dp[maxn],tmp[maxn];
inline string read()
{
    char ch = getchar();
    string st1 = "";
    while (!((ch >= 'a') && (ch <= 'z')))
        ch = getchar();
    while ((ch >= 'a') && (ch <= 'z'))
        st1 += ch, ch = getchar();
    return st1;
}
int main()
{
 scanf("%d",&t);
 while(t--)
 {
  scanf("%d",&n);
  a=read();
  for(int i=0;i<=n;i++)
  {
   dp[i]=0;
   tmp[i]=0;
  }
  dp[n-1]=0,tmp[n-1]=n;
  if(n==2)
  {
   if(a[1]>a[2]||a[1]==a[2])
    printf(">\n");
   else
    printf("<\n");
  }
  else
  {
   for(int i=n-1;i>=0;i--)
   {
    if(a[i]==a[i-1])
    { 
     dp[i-1]=dp[tmp[i]];
     tmp[i-1]=tmp[i];
     //printf("tmp[%d]=%d",i-1,tmp[i-1]);
    }
    else if(a[i-1]>a[i])
    {
     dp[i-1]=1;
     tmp[i-1]=i-1;
    }
    else
    {
     dp[i-1]=-1;
     tmp[i-1]=i-1;
    }
   }
   for(int i=0;i<n-1;i++)
   {
    if(dp[i]==1||dp[i]==0)
     printf(">");
    else
     printf("<");
   }
   printf("\n");
  }

 }
 return 0;
}

B

#include<bits/stdc++.h>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;

int a, b;
ull k;

bool check(ull n)
{
	__int128 ans = 1;
	for (int i = 0; i < a; i++)
	{
		ans = ans * n;
		if (ans > k)
			return false;
	}
	__int128 t = (__int128)ceil(log2(n));
	for (int i = 0; i < b; i++)
	{
		ans = ans * t;
		if (ans > k)
			return false;
	}
	return true;
}

int main()
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		cin >> a >> b >> k;
		ull l = 1, r = 1e18;
		while (l < r)
		{
			ull m = (l + r + 1) >> 1;
			if (check(m))
				l = m;
			else
				r = m - 1;
		}
		cout << r << endl;
	}
}

A
(只比了三个小时,这个题是之后看题解写的)

#include<bits/stdc++.h>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;

const int MOD = 1e9 + 7; 
const int maxn = 1e5 + 20;

vector<int> p[maxn]; // 质数表:放入i的倍数出现的位置 

int query(int i, int l, int r){ //计算下标出现的次数 
	return upper_bound(p[i].begin(), p[i].end(), r) - lower_bound(p[i].begin(), p[i].end(), l);
}

bool binary(int l, int r, int d){
	// 分解质因数
	// 对每一个质数,考虑其是否能满足整除 
	for(int i = 2; i * i <= d; i++){
		int cnt = 0;
		while(d % i == 0){
			d /= i;
			cnt++;
		}
		if(cnt > query(i, l, r))
			return false;
	}
	if(d > 1 && query(d, l, r) < 1)
			return false;
	return true;
} 

int main(){
	int T;
	scanf("%d", &T);
	while(T--){
		int n, m;
		scanf("%d%d", &n, &m);
		for(int i = 0; i <= 1e5; i++)
			p[i]. clear();
		for(int i = 1; i <= n; i++){
			int x;
			scanf("%d", &x);
			//构造质数表 
			for(int k = 2; k * k <= x; k++){
				while(x % k == 0){
					x /= k;
					p[k].push_back(i); 
				}
			}
			if(x > 1)
				p[x].push_back(i); 
		}
		while(m--){
			int l, r, d;
			scanf("%d%d%d", &l, &r, &d);
			if(!binary(l, r, d))
				printf("No\n");
			else
				printf("Yes\n");
		}
	}
	return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值