首页 > 其他分享 >CF1008 Codeforces Round 497 (Div. 2)

CF1008 Codeforces Round 497 (Div. 2)

时间:2023-09-27 22:24:38浏览次数:49  
标签:497 int CF1008 long dx dy using Div include

CF1008A Romaji

直接模拟。


#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=105;
int n;
char s[N];
int main()
{
	scanf("%s",s+1);
	n=strlen(s+1);
	for(int i=1;i<=n;i++)
		if(s[i]!='a'&&s[i]!='e'&&s[i]!='i'&&s[i]!='o'&&s[i]!='u'&&s[i]!='n')
		{
			if(s[i+1]!='a'&&s[i+1]!='e'&&s[i+1]!='i'&&s[i+1]!='o'&&s[i+1]!='u')
			{
				printf("NO");
				return 0;
			}
		}
	printf("YES");
	return 0;
}

CF1008B Turn the Rectangles

从左往右使得每个位置能高尽量高。


#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005;
int n;
int w[N],h[N];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&w[i],&h[i]);
	int pre=1e9;
	for(int i=1;i<=n;i++)
	{
		if(w[i]<h[i]) swap(w[i],h[i]);
		if(w[i]<=pre) pre=w[i];
		else if(h[i]<=pre) pre=h[i];
		else
		{
			printf("NO");
			return 0;
		}
	}
	printf("YES");
	return 0;
}

CF1008C Reorder the Array

将 \(a\) 从大到小排序,从左往右扫一遍,维护一下左边的数用到了第几个,如果能匹配就答案加一。


#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100005;
int n;
int a[N];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	sort(a+1,a+n+1,greater<int>());
	int ans=0,pre=1;
	for(int i=2;i<=n;i++)
		if(a[pre]>a[i]) ans++,pre++;
	printf("%d",ans);
	return 0;
}

CF1008D Pave the Parallelepiped

分类讨论容斥即可。

注意计数要不重不漏。


#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int N=100005;
int n;
int prime[N],tot;
bool isprime[N];
void init(int n=100000)
{
	memset(isprime,true,sizeof(isprime));
	isprime[1]=false;
	for(int i=2;i<=n;i++)
	{
		if(isprime[i]) prime[++tot]=i;
		for(int j=1;j<=tot&&i*prime[j]<=n;j++)
		{
			isprime[i*prime[j]]=false;
			if(i%prime[j]==0) break;
		}
	}
	return;
}
long long d(int n)
{
	vector<int>pos;
	for(int i=1;i<=tot&&prime[i]<=sqrt(n);i++)
		if(n%prime[i]==0)
		{
			int cnt=0;
			while(n%prime[i]==0) cnt++,n/=prime[i];
			pos.emplace_back(cnt);
		}
	if(n!=1) pos.emplace_back(1);
	long long res=1;
	for(int c:pos)
		res*=(c+1);
	return res;
}
int T;
int a,b,c;
void solve()
{
	scanf("%d%d%d",&a,&b,&c);
	int ab=__gcd(a,b),ac=__gcd(a,c),bc=__gcd(b,c),abc=__gcd(ab,bc);
	long long ans=d(a)*d(b)*d(c);
	ans-=(d(c)*d(ab)*(d(ab)-1)+d(b)*d(ac)*(d(ac)-1)+d(a)*d(bc)*(d(bc)-1))/2;
	ans+=d(abc)*(d(abc)-1)*(d(abc)-2)/6*4;
	ans+=d(abc)*(d(abc)-1)*(d(ab)+d(bc)+d(ac)-3*d(abc)+2)/2;
	ans-=(d(ab)-d(abc))*(d(bc)-d(abc))*(d(ac)-d(abc));
	printf("%lld\n",ans);
	return;
}
int main()
{
	init();
	scanf("%d",&T);
	while(T--)
		solve();
	return 0;
}

CF1008E Guess two numbers

维护一下当前的值 \(x,y\),满足 \(x\leq a,b\leq y\),我们可以用一个 \(dx,dy\) 找出 \(x+dx\le a,y+dy\le b\),用类似倍增的方法搞一搞就好了,复杂度不太会证。


#include<iostream>
#include<cstdio>
using namespace std;
long long n;
int query(long long x,long long y)
{
	printf("%lld %lld\n",x,y);
	fflush(stdout);
	int k;
	scanf("%d",&k);
	if(k==0) exit(0);
	return k;
}
int main()
{
	scanf("%lld",&n);
	long long x=0,y=0,dx=1,dy=1;
	while(1)
	{
		int k=query(x+dx,y+dy);
		if(k==1) x+=dx,dx=min(dx*2,n-x);
		else if(k==2) y+=dy,dy=min(dy*2,n-y);
		else if(k==3) dx=max(dx/2,1LL),dy=max(dy/2,1LL);
	}
	return 0;
}

标签:497,int,CF1008,long,dx,dy,using,Div,include
From: https://www.cnblogs.com/zhou-jk/p/17734496.html

相关文章

  • CF996 Codeforces Round 492 (Div. 2) [Thanks, uDebug!]
    CF996AHittheLottery直接贪心尽可能的分配到\(k_5\),剩下的依次分配给\(k_4,k_3,k_2,k_1\)。#include<iostream>#include<cstdio>usingnamespacestd;intn;intk[6];intmain(){ scanf("%d",&n); k[5]=n/100,n%=100; k[4]=n/20,n%=20; k[3]=n/1......
  • CF1011 Codeforces Round 499 (Div. 2)
    CF1011AStages每次记下上一个选的位置,贪心能填就填。#include<iostream>#include<cstdio>usingnamespacestd;constintN=55;intn,k;chars[N];intcnt[27];intmain(){ scanf("%d%d",&n,&k); scanf("%s",s+1); for(inti=1;i<=n......
  • CF1020 Codeforces Round 503 (by SIS, Div. 2)
    CF1020ANewBuildingforSIS分类讨论\(a,b\)两个端点的几种情况就好了,特判\(t_a=t_b\)的情况。#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>usingnamespacestd;intn,h,a,b,k;voidsolve(){ intta,fa,tb,fb; scanf(&qu......
  • CF1036 Educational Codeforces Round 50 (Rated for Div. 2)
    CF1036AFunctionHeight答案为\(\lceil\frac{k}{n}\rceil\)。#include<iostream>#include<cstdio>usingnamespacestd;longlongn,k;intmain(){ scanf("%lld%lld",&n,&k); printf("%lld",(k+n-1)/n); return0;}......
  • CF1079 Codeforces Round 522 (Div. 2, based on Technocup 2019 Elimination Round 3
    CF1079AKitchenUtensils令\(c_i\)表示餐具\(i\)出现的数量,最小的餐具套数为\(t=\lceil\frac{\max\{c_i\}}{k}\rceil\),按照这个计算就好了。#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=105;intn,k;inta[N]......
  • CF1072 Codeforces Round 517 (Div. 2, based on Technocup 2019 Elimination Round 2
    CF1072AGoldenPlate第\(i\)个矩形的周长为\(2(w-4(i-1))+2(h-4(i-1))-4\),枚举\(i\)求和。#include<iostream>#include<cstdio>usingnamespacestd;intn,m,k;intmain(){ scanf("%d%d%d",&n,&m,&k); intans=0; for(i......
  • CF1162 Codeforces Round 557 (Div. 2) [based on Forethought Future Cup - Final Ro
    CF1162AZoningRestrictionsAgain每个位置越高越好,暴力模拟即可。#include<iostream>#include<cstdio>usingnamespacestd;constintN=55;intn,h,m;inta[N];intmain(){ scanf("%d%d%d",&n,&h,&m); for(inti=1;i<=n;i++) a[i]=h;......
  • Codeforces Round 900 (Div. 3) - A B C D E
    目录A.HowMuchDoesDaytonaCost?B.AleksaandStackA.HowMuchDoesDaytonaCost?判断数k包不包含在数组里面即可B.AleksaandStack选定初始数为2,3,后面的遍历法二:全奇数即可,因为奇数+奇数=偶数,奇数x3=奇数,......
  • [题解] Codeforces Round 900(Div.3) E~F
    CodeforcesRound900(Div.3)E~FE.Iva&Pav因为按位与的结果不会随着越多数字的增加而增加,因此我们可以利用这个性质二分出右端点,只需要一个可以查询区间的数据结构即可。或者是按位考虑第\(i\)个数字的第\(k\)位,后缀最近的\(0\)的位置,按位考虑也可以。但是这题使用二分......
  • Social Infrastructure Information Systems Division, Hitachi Programming Contest
    A-HitachiString满足条件的串即为串长为偶数且相邻两个均为为hi,直接判断即可。代码:#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;constintN=15;intn;chars[N];intmain(){ scanf("%s",s+1); n=strlen(s+1); if(n&1) ......