日 常 课 程 整 理

/*1353C
有一个大小为n*n的数组(n为奇数),每个格子初始有一个棋子,
每次操作可以选一个移到周围八个格子中,问最少多少次操作可
以把所有柜子移到一个格子里。 
思路:
1、很明显从中间出发操作次数最少,找出中心位置;
2、从中心开始,每向外一圈 ,每个棋子移到中间的频数加1;
 
 
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T;
int m; 
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		long long res=0;
		int st=1,len=(n+1)/2;//找到中心位置 len,每一圈要移的个数st
		for(int i=0;i<len;i++)
		{
			res+=ll(st)*i; //用每圈个数乘权 ,注意数据用LL 
			st=ll(i*2+1)*4+4;//计算下一圈的个数 
		}
		printf("%I64d\n",res);//LL输入输出有的用lld,有的用I64d 
	}
	return 0;
}
/*988A
n个数(A1到AN)中选择K个,使得K个数两两不相等。如果能,输出YES并输出方案中的K个数下标,否则输出NO。 
    用map做法思路:
    1、把元素存入map,把N个数作为关键字实现去后重, 下标作为值(value);
	2、通过指针判断并输出 。

*/

#include<bits/stdc++.h>
using namespace std;
int n,k;
map<int,int>m;
int main()
{
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		int a;
		scanf("%d",&a);
		m[a]=i;//在map存入, ,把N个数作为关键字,下标作为值,自动去重(值自动替换,如用pair成对赋值,则值不会被替换) 
	}
	if(m.size()<k)printf("NO\n");
	else
	{
		printf("YES\n");
		bool fr=false;//标记用来判断是否输入空林和 
		map<int,int>::iterator it;//定义指针 
		for(it=m.begin();it!=m.end()&&k>0;it++,k--)
		{
			if(fr) printf(" ");
			else fr=true;
			printf("%d",it->second);//输出map的值,注意用 it->second
		}
		printf("\n");
	}
	return 0;
}
/*cf 988A 
从n个数(A1到AN)中选择K个,使得K个数两两不相等。如果能,输出YES并输出方案中的K个数下标,否则输出NO。 
    用set和vector做法思路:
    用set输入,同时用vector存下标,判断后输出 
*/ 
#include<bits/stdc++.h>
using namespace std;
int n,k;
set<int>s;
vector<int>ans;
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		if(s.find(x)==s.end()&&ans.size()<k)//s.find(x)==s.end()表示 SET<int>中没找到元素x
		{
			ans.push_back(i);//长度小于K就一直在动态数组中存入(去重) 
		}
		s.insert(x);//同时用set存入元素实现自动去重排序 
	}
	if(ans.size()<k) cout<<"NO\n";
	else
	{
		cout<<"YES\n";
		for(int i=0;i<ans.size();i++)//输出下标 
		{
			cout<<ans[i]<<" ";
		}
		cout<<"\n";
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值