暴力模拟跑一遍即可,答案是2658417853
#include
using namespace std;
int main()
{
long long cnt1=0,cnt2=0,cnt3=0;
long long ans=0,i,j,t;
for(i=1;i<=2019;i++)
{
j=i;
int flag=0;
while(j!=0)
{
if(j%10==0||j%10==1||j%10==2||j%10==9)
{
flag=1;break;
}
j/=10;
}
if(flag) {
ans+=i*i;
cout<
一个斐波那契数列的变种,因为项数很多而且求最后四位数组所以也不用想太多,答案是4659
#include
using namespace std;
#define int long long
int a[4];
signed main()
{
a[1]=1,a[2]=1,a[3]=1;
int i,j,ans;
for(i=4;i<=20190324;i++)
{
a[4]=(a[1]%10000+a[2]%10000+a[3]%10000)%10000;
a[1]=a[2]%10000;
a[2]=a[3]%10000;
a[3]=a[4]%10000;
}
cout<
其实不难想到49个法术每天都要用也就是七个星期,而七个星期每次都取中位数,那么贪心的每次都想取最大,所以模拟一下,第一周取最小的1,2,3然后取个最大的49,48,47,46,再排序,取七次即可。最后答案34
#include
using namespace std;
#define int long long
signed main()
{
vectorans[7];
int min1=1,max1=49,ans1=0;
int i,j;
for(i=0;i<7;i++)
{
while(ans[i].size()!=7)
{
if(ans[i].size()<3){
ans[i].push_back(min1++);
}
else {
ans[i].push_back(max1--);
}
}
sort(ans[i].begin(),ans[i].end());
for(j=0;j
发现是从起点到终点的最短路,所以首选bfs,然后要求路径,这里处理一下,把每个点是从哪个点过来的记录一下,然后输出的时候再从尾到头找回去,记得输出要翻转字符串。
#include
using namespace std;
char mp[55][55];
int dx[5]= {0,1,0,0,-1},dy[5]= {0,0,-1,1,0};
bool vis[55][55];
int pre[55*55+1000];
int main()
{
string ly;
int n,m,i,j,t;
pairPI;
cin>>n>>m;
getchar();
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cin>>mp[i][j];
}
}
queue>qq;
map,int >ans;
map,pair>edges;
qq.push({1,1});
while(!qq.empty())
{
pair aa=qq.front();
qq.pop();
int x1=aa.first,y1=aa.second;
if(x1==n&&y1==m)
{
cout<=1&&x2<=n&&y1>=1&&y2<=m)
{
vis[x2][y2]=1;
ans[ {x2,y2}]=ans[ {x1,y1}]+1;
edges[ {x2,y2}].first=x1;
edges[ {x2,y2}].second=y1;
qq.push({x2,y2});
}
}
}
int edx=n,edy=m;
string ss="";
mapqm;
qm[1]='D',qm[2]='L',qm[3]='R',qm[4]='U';
while(1)
{
int x1=edges[ {edx,edy}].first;
int y1=edges[ {edx,edy}].second;
for(i=1;i<=4;i++)
{
if(x1+dx[i]==edx&&y1+dy[i]==edy)
{
ss+=qm[i];
break;
}
}
edx=x1,edy=y1;
if(edx==1&&edy==1){
break;
}
}
reverse(ss.begin(),ss.end());
cout<
模拟找节点找深度就行,比较简单
#include
using namespace std;
#define int long long
signed main()
{
int N,i,j;
vectorans[555];
cin>>N;
int cnt=0,sum1=1;
for(i=1;i<=N;i++)
{
cin>>j;
if(i<=sum1)
{
ans[cnt].push_back(j);
}
else {
++cnt;
sum1+=(1<max1)
{
max1=ss1;
anss=i+1;
}
}
cout<
一个模拟贪心题,观察到时间不是很长,所以模拟时间跑就行,不过这里细节挺多的,要注意出队入队的条件,读题要读清楚。
#include
using namespace std;
const int maxn=1e5+1000;
struct node {
int pret,levl;
bool f1;
}mo[maxn];
struct node1 {
int stt,idd;
}qury[maxn];
bool cmp1(node1 a,node1 b )
{
if(a.stt!=b.stt)
return a.stt>n>>m>>t;
for(i=0;i>qury[i].stt>>qury[i].idd;
}
sort(qury,qury+m,cmp1);
for(i=0;imo[id-1].pret)
mo[id-1].levl=max(mo[id-1].levl-(ts-mo[id-1].pret-1),0);
if(mo[id-1].f1==1&&mo[id-1].levl<=3) mo[id-1].f1=0;
mo[id-1].levl+=2;
if(mo[id-1].f1==0&&mo[id-1].levl>5) mo[id-1].f1=1;
mo[id-1].pret=ts;
}
int ans=0;
for(i=0;i5) mo[i].f1=1;
if(mo[i].f1==1&&mo[i].levl<=3) mo[i].f1=0;
if(mo[i].f1==1) ans++;
}
cout<
真是没想到是并查集做法,待补
不会,二分贪心跑了几分
不会