2 条题解
-
2
我会检查。注意到 Subtask 1 中 。我们依次枚举 ,所有满足 的二元对 ,要求 的值两两相等。时间复杂度:
我会暴力。应该随便写个指数级暴力就能过 Subtask 2 了吧。
确信。我会正解。
先猜一手结论: 是等差序列。接下来进行证明。
若 ,我们有以下式子:
- ;
- ;
- 。
式减去 式得到 。以此类推,不难发现 序列为等差数列。
不过要特判 。
如果 ,我们只需要算出公差(要求是整数),然后看是否能够还原出一个等差数列。
时间复杂度:。
void solve(){ //don't forget to open long long; int n,m;IO::cin>>n>>m;std::vector<int>v(n,1e9+1); while(m--){int x,y;mp[x]++;;IO::cin>>x>>y;x--;v[x]=y;} while(!v.empty()&&v.back()==1e9+1)v.pop_back(); reverse(all(v)); while(!v.empty()&&v.back()==1e9+1)v.pop_back(); reverse(all(v)); if(v.size()<=1)return IO::cout<<"Yes"<<'\n',void(); int d=v.size()-1;ll L=v[0],R=v[d]; if((R-L)%d)return IO::cout<<"No\n",void(); ll B=(R-L)/d; for(int i=1;i<=d;i++){ if(v[i]==1e9+1)v[i]=v[i-1]+B; if(v[i]!=v[i-1]+B)return IO::cout<<"No"<<'\n',void(); }IO::cout<<"Yes"<<'\n'; }
信息
- ID
- 26
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 1183
- 已通过
- 327
- 上传者