Logo aaa 的博客

博客

标签
暂无

AT4171

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-05-09 11:50:50

思路

输入字符串 $s$ 和 $s1$,让 $s2$ 等于$s$,之后就 do while 循环,条件是 $s2$ 不等于 $s$。判断 $s2$ 是否等于 $s1$,是就输出,结束程序;不是就让 $s2$ 等于自己的最后一位加上自己,再删除最后一个字符。

最后在外面输出 No 就好了。

代码

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;

int main() {
	string s,s1,s2;
	cin>>s>>s1;
	s2=s;
	
	do{
		if(s2==s1){
			cout<<"Yes";
			return 0;
		}
		s2=s2[s.size()-1]+s2;
		s2.erase(s2.end()-1); 
	}
	while(s2!=s);
	cout<<"No";
	return 0;
}

UVA483

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-05-20 14:54:21

思路

每次都输入字符串变量 $s$,之后方向输出 $s$,在读入下一个输入字符,再输出这个字符就好了。

代码

#include <string>
#include <cstdio>
#include <iostream>
using namespace std;

int main(){
	string s;
	while(cin>>s){
		for(int i=s.size()-1;i>=0;--i)
			cout<<s[i];
		char c=getchar();
		cout<<c;
	}
	return 0;
}

UVA10370

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-05-24 15:49:07

思路

循环输入 $n$ 和 $a_{i}$,定义变量 $sum$ 每次加上 $a_{i}$,再让它除以 $n$,就是平均数了。再循环比较,如果大于,就让 $ans$ 加一。最后输出 $ans$ 除以 $n$ 就好了。

代码

#include <string>
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;

int main(){
	int t,n,a[1005];
	cin>>t;
	while(t--){
		int sum=0,ans=0;
		cin>>n;
		for(int i=1;i<=n;++i){
			cin>>a[i];
			sum+=a[i];
		}
		sum\/=n;
		for(int i=1;i<=n;++i){
			if(a[i]>sum)
				++ans;
		}
		printf("%.3lf%%\n",ans*1.0\/n*100.0);
	}
	return 0;
}

AT4290

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-06-05 19:06:03

思路

题目中说道要使低于 $k$ 和 高于或等于 $k$ 相等,问这样的 $k$ 最多有几个。

所以可以知道,$k$ 必须是这些数中中间大小的两个数的差之间,而答案也就是中间两数的差。

代码

#include <iostream>
#include <string>
#include <cmath> 
#include <map>
#include <algorithm>
#include <cstdio>
using namespace std;

int main(){
	int n,a[100005];
	cin>>n;
	for(int i=1;i<=n;++i)	
		cin>>a[i];
	sort(a+1,a+n+1);
	cout<<a[n\/2+1]-a[n\/2];
	return 0;
}

CF1491A题解

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-03-07 12:38:20

题目传送门

题目大意

输入长度为n的数组,数组中只有01。然后给出q次判断:

  1. $a_{x}=1$减$a_{x}$。
  2. 输出数组中第$k$大的数字。

由于数组中只有01,所以就可以用一个计数器计1的个数,输出时再判断就可以了。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
	int n,q,a[100001],ans=0;\/\/ans用来记几个1,0就不用记了。 
	cin>>n>>q;
	for(int i=1;i<=n;++i)
		cin>>a[i],ans+=a[i];\/\/记1的个数 
	for(int i=1;i<=q;++i)
	{
		int t,k;
		cin>>t>>k;
		if(t==1)
		{
			a[k]=1-a[k];
			if(a[k])
				++ans;\/\/1的数量+1 
			else
				--ans;\/\/1的数量-1 
		}
		else
		{
			if(ans<k)
				cout<<0<<endl;\/\/如果1的数量比k小,就输出0,否则输入1。 
			else
				cout<<1<<endl;
		}
	}
	return 0;\/\/好习惯  
} 

P7227题解

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-03-08 16:43:07

此解不是正解! $ $

思路

我们当然是输出的单词越少越好,但是输出的单词不能到a,要到$max(a,\frac{b}{2})$。然后可以定义一个计数器sum用来记一共输出的数量,如果到了$max(a,\frac{b}{2})$就$return 0;$。然后我的暴力做法就是不停循环,一开始是1重循环,后来是2重循环…………直到sum==$max(a,\frac{b}{2})$才$return 0;$。

不多说了,上代码!

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

int main() {
	int a,b,c,sum=0;
	cin>>a>>b;
	c=b>>1;
	for(char i='a'; i<='z'; ++i) {
		++sum;
		if(sum-1==max(c,a))
			return 0;
		cout<<i<<' ';
	}
	for(char j='a'; j<='z'; ++j) {

		for(char i='a'; i<='z'; ++i) {
			++sum;
			if(sum-1==max(c,a))
				return 0;
			cout<<j<<i<<' ';
		}
	}
	for(char t='a'; t<='z'; ++t) {

		for(char j='a'; j<='z'; ++j) {

			for(char i='a'; i<='z'; ++i) {
				++sum;
				if(sum-1==max(c,a))
					return 0;
				cout<<t<<j<<i<<' ';
			}
		}
	}
	for(char y='a'; y<='z'; ++y) {

		for(char t='a'; t<='z'; ++t) {

			for(char j='a'; j<='z'; ++j) {

				for(char i='a'; i<='z'; ++i) {
					++sum;
					if(sum-1==max(c,a))
						return 0;
					cout<<y<<t<<j<<i<<' ';
				}
			}
		}
	}
	for(char s='a'; s<='z'; ++s) {

		for(char y='a'; y<='z'; ++y) {

			for(char t='a'; t<='z'; ++t) {

				for(char j='a'; j<='z'; ++j) {

					for(char i='a'; i<='z'; ++i) {
						++sum;
						if(sum-1==max(c,a))
							return 0;
						cout<<s<<y<<t<<j<<i<<' ';
					}
				}
			}
		}
	}
	return 0;
}

CF1405A题解

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-03-23 21:16:27

思路

输入$a_{i}$后,倒着输出$a_{i}$就好了。

代码

#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
int main(){
	int t,a[10005],n;
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;++i)
			cin>>a[i];
		for(int i=n;i>=1;--i)
			cout<<a[i]<<' ';
		cout<<endl;
	}
	return 0;
}

第一篇题解

CF1453A题解

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-03-24 16:01:13

思路

由于本题数据较弱,所以用暴力
输入完 $a_{ i}$ 和 $b_{ j}$ 后逐一比较,看是否相等,如果相等就计数器加 $1$。

代码

#include <cstdio>
#include <iostream>
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int main(){
	int t=read();
	while(t--){
		int n=read(),m=read(),sum=0;
		int a[103]={0},b[103]={0};
		for(int i=1;i<=n;++i)
			a[i]=read();
		for(int i=1;i<=m;++i)
			b[i]=read();
		for(int i=1;i<=n;++i)
		{
			for(int j=1;j<=m;++j)
				if(a[i]==b[j])
					++sum;
		}
		printf("%d\n",sum);
	}
	return 0;
}

AT5308题解

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-03-25 14:56:51

思路

$n$ 只要不为 $0$ 就不停循环,$++ans$ 并让 $n/=k$。

代码

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int main(){
	int ans=0;
	for(int n=read(),k=read();n;n\/=k,++ans);\/\/压行
	cout<<ans;
	return 0;
}

AT4266题解

本文章由 WyOJ Shojo 从洛谷专栏拉取,原发布时间为 2021-03-26 16:16:03

思路

循环输入 $h$,如果求出的温度减去 $a$ 摄氏度要比之前的最小温度小,那么最小温度就等于它,输出的序号等于 $i$。

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int main()
{
	double minn=100000000000000.0;
	int n,t,a,l;
	n=read();
	t=read();
	a=read();
	for(int i=0;i<n;++i){
		int h=read();
		if(abs(t-h*0.006-a)<minn)
			minn=abs(t-h*0.006-a),l=i+1;
	}
	cout<<l;
	return 0;
}
共 45 篇博客