1 条题解
-
0
题目逻辑分析
完全理解题意后,可知V''只有一个元素,则后续再进行操作时不会再进行相乘取余操作。
核心问题
假设第一次得到的V''中元素为x,则x需满足什么条件,下一次才能得到相同的数?
- 结论:仅当x为0、1、2时可能满足。
- 验证:
-
- x=3:下一次计算结果为3×3-3=6;
-
- x=4:下一次计算结果为4×4-4=12(数值持续增大);
-
- 规律:当x≥3时,后续结果会不断变大,无法回到原数。即 f(x)=x²-x 的图像.
最终推导
循环第一遍后,若得到的数≤2,则有解(其实x只能=0/2,可自行推导原因);若得到的数>2,则无解。
附AC码(抱歉,上一版代码粘错了):
#include <iostream> #include <vector> #define int long long using namespace std; signed main() { int t; cin >> t; while(t--){ int n; cin >> n; int key1=0; int key2=0; bool key=1; vector<int>ai(n); for(int i=0;i<n;i++){ cin >> ai[i]; } if(n==1){ if(ai[0]>2){ cout << "No" << endl; }else if(ai[0]==1){ cout << "Yes " << 0 << endl; }else if(ai[0]==2){ cout << "Yes " << 2 << endl; } continue; } for(int i=0;i<n-1;i++){ int vis=((ai[i]%10)*(ai[i+1]%10))%10; if(vis>2){ key=0; }else if(vis==2){ key2++; } } if(key==0||key2>1){ cout << "No" << endl; }else{ cout << "Yes " << key2*2 << endl; } } return 0; }
- 1
信息
- ID
- 1201
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 68
- 已通过
- 10
- 上传者