近期没有cf的比赛了,慢慢刷题,积累经验希望下几次cf可以不仅仅是签到,弱鸡冲绿名!!!
原题链接: https://codeforces.com/contest/1647/problem/A
其实div2的第一题基本上找规律基本都能做出来没有自己想象的那么复杂(不需要复杂的推导),昨天还是弱鸡a题打卡被碾压
把前10个数的结果模拟出来如下
这时候就会发现得出的答案其实只和2和1有关而且相邻的两个数不重复也就是像1212这一类的所以只要确定第一位往后的就可 以根据条件递推出来剩下的数
根据构造n % 3的余数确定第一位数
总结:其实题目中所说的最大无0不重复的数其实是找规律找出来的,并不是自己瞎掰扯出来的
刚开始不知道为什么把前五个枚举了一下
#include<iostream>
using namespace std;
int t;
int n;
int main()
{
cin >> t;//scanf("%d\n", &t);
//for(int i = 0; i < t ; i ++)
//cin >> a[i];//scanf("%d\n",&a[i]);
while(t --)
{
cin >> n;
if(n == 1) printf("1\n");//cout << '1' << endl;
if(n == 2) printf("2\n");//cout << '2' << endl;
if(n == 3) printf("21\n");//cout << "21"<< endl;
if(n == 4) printf("121\n");//cout << "121" << endl;
if(n == 5) printf("212\n");//cout << "212" << endl;
if(n > 5)
{
int flag;
if (n % 3 == 1) printf("1"), n -= 1, flag = 1;
else printf("2"), n -= 2, flag = 2;
while(n)
{
printf("%d",3 - flag);//cout << 3 - flag;
n -= 3 - flag;
flag = 3 - flag;
}
puts("");
}
}
return 0;
}
去掉前五个特判
#include<iostream>
using namespace std;
int t;
int n;
int main()
{
cin >> t;
while(t --)
{
int flag;
cin >> n;
if(n % 3 == 1) cout << 1, n -= 1, flag = 1;
else cout << 2, n -= 2, flag = 2;
while(n)
{
cout << 3 - flag;
n -= 3 - flag;
flag = 3 - flag;
}
puts("");
}
return 0;
}
大佬,你这个翻译为什么没乱码?
因为有的时候A题并没有那么复杂的符号和式子,浏览器自带翻译就能不乱码
浏览器自带的翻译 翻译的很怪啊,有可能也会出错。。建议用deepl翻译器
学到了学到了hh谢谢