實作二
b965. 2. 矩陣轉換(2016/3)
程式碼
#include<bits/stdc++.h>
using namespace std;
#define N 555
#define nn "\n"
#define int long long
//---------------------------------------------------
int v[N][N];
//---------------------------------------------------
#undef int
int main(){
#define int long long
//---------------------------------------------------
//istringstream cin("6 7 3 \
3 2 2 1 \
1 6 1 2 \
1 3 2 5");
int n,m,k;
cin>>n>>m>>k;
for(int ii=0;ii<k;ii++){
int a,b,c,d;
cin>>a>>b>>c>>d;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(abs(a-i)+abs(b-j)<=c){
v[i][j]+=d;
}
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<v[i][j]<<" ";
}cout<<nn;
}
return 0;
//---------------------------------------------------
}
c295. APCS-2016-1029-2最大和(2016/10)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define stop system("pause");
int v[30][30];
int f[30];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("3 2 \
1 5 \
6 4 \
1 1");
// istringstream cin("4 3 \
6 3 2 \
2 7 9 \
4 7 1 \
9 5 3");
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>v[i][j];
}
}
int ans=0;
int isn=0;
for(int i=0;i<n;i++){
int ma=0;
for(int j=0;j<m;j++){
ma=max(ma,v[i][j]);
}
ans+=ma;
f[i]=ma;
}
// for(int i=0;i<n;i++){
// cout<<f[i];
// }
cout<<ans<<"\n";
int p=0;
for(int i=0;i<n;i++){
if(ans%f[i]==0){
if(p==1){
cout<<" ";
}
cout<<f[i];
p=1;
isn=1;
}
}
if(isn==0){
cout<<-1;
}
return 0;
}
c291. APCS 2017-0304-2小群體(2017/3)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define stop system("pause");
#define N 50001
int v[N];
bool vis[N];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("10 \
4 7 2 9 6 0 8 1 5 3");
cin.tie(0);
// istringstream cin("3 \
0 2 1");
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>v[i];
}
int ans=0;
for(int i=0;i<n;i++){
if(vis[i]){
continue;
}
int f=i;
// cout<<"i: "<<i<<"\n";
vis[i]=true;
while(!vis[v[f]]){
vis[v[f]]=true;
f=v[f];
// cout<<"f: "<<f<<"\n";
}
ans++;
}
cout<<ans;
return 0;
}
"難不會考"
難、不會考! c462. apcs 交錯字串 (Alternating Strings)(2017/10)
程式碼
o(n)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define stop system("pause");
#define N 200001
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("1 aBBdaaa");
// istringstream cin("3 DDaasAAbbCC");
// istringstream cin("2 aafAXbbCDCCC");
// istringstream cin("3 DDaaAAbbCC");
int k;
string s;
cin>>k;
cin>>s;
int n=s.size();
int v[N];
vector<int>vv;
for(int i=0;i<n;i++){
if('a'<=s[i] && s[i]<='z'){
v[i]=0;
}
else{
v[i]=1;
}
}
int sum=1;
for(int i=1;i<n;i++){
if(v[i-1]==v[i]){
sum++;
}
else{
vv.push_back(sum);
sum=1;
}
if(i==n-1){
vv.push_back(sum);
}
}
n=vv.size();
int l=0;
sum=0;
int ans=0;
for(int r=0;r<n;r++){
if(vv[r]==k){
sum++;
int p=0;
if(l-1>=0 && vv[l-1]>k)p++;
if(r+1<n && vv[r+1]>k)p++;
if(sum+p>ans){
ans=sum+p;
}
}
else{
l=r+1;
sum=0;
}
}
ans*=k;
if(s.size()==1 && k==1){
ans=1;
}
cout<<ans;
return 0;
}
O(n^2)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define stop system("pause");
int v[100001];
int k;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("1 \
aBBdaaa");
// istringstream cin("3 \
DDaasAAbbCC");
// istringstream cin("2 \
aafAXbbCDCCC");
// istringstream cin("3 \
DDaaAAbbCC");
cin>>k;
string s;
cin>>s;
int n=s.size();
// for(int i=0;i<n;i++){
// cout<<s[i];
// }cout<<"\n";
for(int i=0;i<n;i++){
if('a'<=s[i] && s[i]<='z'){
v[i]=-1;
}
else{
v[i]=1;
}
}
int ans=0;
for(int i=0;i<n;i++){
int f=v[i];
int sum=0;
int t=0;
for(int j=i;j<n;j++){
if(v[j]!=f){
break;
}
t++;
if(t==k){
sum+=k;
t=0;
f*=-1;
}
}
ans=max(ans,sum);
}
cout<<ans;
return 0;
}
難、不會考! e294. APCS 類似題 - 小崴的新發現(2018/6)
d007: 習題 Q-1-8. 子集合的和 (2018/10)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define stop system("pause");
int n,m;
int v[30];
int ans;
void d(int i,int sum){
if(sum<=m)ans=max(ans,sum);
if(i==n || sum>m)return;
d(i+1,sum+v[i]);
d(i+1,sum);
return;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>v[i];
}
d(0,0);
cout<<ans;
return 0;
}
e287. 機器人的路徑(2019/6)
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define stop system("pause");
int v[1000][1000];
int ans=0;
int n,m;
int x,y;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
int mi=INT_MAX;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>v[i][j];
if(v[i][j]<mi){
mi=v[i][j];
x=i,y=j;
}
}
}
for(int i=0;i<=n+1;i++){
v[i][0]=0;
v[i][m+1]=0;
}
for(int j=0;j<=m+1;j++){
v[0][j]=0;
v[n+1][j]=0;
}
ans+=v[x][y];
int a[4]={0,-1,0,1};
int b[4]={-1,0,1,0};
v[x][y]=0;
while(1){
int mi=INT_MAX;
int mix=-1;
int miy=-1;
for(int i=0;i<4;i++){
if(v[x+a[i]][y+b[i]]<mi && v[x+a[i]][y+b[i]]!=0){
mi=v[x+a[i]][y+b[i]];
mix=x+a[i];
miy=y+b[i];
}
}
if(mix==-1&&miy==-1)break;
ans+=v[mix][miy];
v[mix][miy]=0;
x=mix,y=miy;
}
cout<<ans;
return 0;
}
h027. 202001_2 矩陣總和(2020/1)
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
// istringstream cin("3 3 5 5 2 \
1 2 1 \
2 4 2 \
2 4 5 \
1 2 1 2 3 \
2 4 2 4 2 \
2 4 2 3 5 \
3 2 4 2 0 \
3 2 4 5 5");
int n,m,nn,mm,t,ans=0,mi=LONG_LONG_MAX;
cin>>n>>m>>nn>>mm>>t;
int v[101][101]={};
int vv[101][101]={};
int sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>v[i][j];
sum+=v[i][j];
}
}
for(int i=0;i<nn;i++){
for(int j=0;j<mm;j++){
cin>>vv[i][j];
}
}
// cout<<sum<<"\n";
// for(int i=0;i<nn;i++){
// for(int j=0;j<mm;j++){
// cout<<vv[i][j];
// }cout<<"\n";
// }
// cout<<"\n";
for(int i=0;i<nn-n+1;i++){
for(int j=0;j<mm-m+1;j++){
int ssum=0;
int d=0;
for(int k=i;k<i+n;k++){
for(int l=j;l<j+m;l++){
ssum+=vv[k][l];
if(v[k-i][l-j]!=vv[k][l]){
d++;
}
// cout<<vv[k][l];
}
// cout<<"\n";
}
// cout<<"ssum: "<<ssum<<"\n";
// cout<<"d: "<<d<<"\n";
if(d<=t){
ans++;
mi=min(mi,abs(ssum-sum));
}
}
}
cout<<ans<<"\n";
if(mi==LONG_LONG_MAX){
cout<<-1;
}
else{
cout<<mi;
}
return 0;
}
f580. 2. 骰子(2020/7)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int v[21][3][3]={};
int n,m;
void out(){
for(int i=0;i<n;i++){
for(int j=0;j<3;j++){
for(int k=0;k<3;k++){
cout<<v[i][j][k]<<" ";
}cout<<"\n";
}cout<<"\n";
}
cout<<"-----------------------\n";
return;
}
void r(int x){
int temp;
temp=v[x][1][0];
v[x][1][0]=v[x][2][2];
v[x][2][2]=v[x][1][2];
v[x][1][2]=v[x][1][1];
v[x][1][1]=temp;
return;
}
void f(int x){
int temp;
temp=v[x][0][1];
v[x][0][1]=v[x][2][2];
v[x][2][2]=v[x][2][1];
v[x][2][1]=v[x][1][1];
v[x][1][1]=temp;
return;
}
void sw(int x,int y){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
swap(v[x][i][j],v[y][i][j]);
}
}
return;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("1 2 \
1 -2 \
1 -1");
// istringstream cin("3 3 \
2 -1 \
3 -2 \
3 1");
cin>>n>>m;
for(int i=0;i<n;i++){
v[i][0][1]=3;
v[i][1][0]=5;
v[i][1][1]=1;
v[i][1][2]=2;
v[i][2][1]=4;
v[i][2][2]=6;
}
for(int i=0;i<m;i++){
int x,y;
cin>>x>>y;
x--;y--;
if(y==-2){
f(x);
}
else if(y==-3){
r(x);
}
else{
sw(x,y);
}
// out();
}
for(int i=0;i<n;i++){
cout<<v[i][1][1]<<" ";
}
return 0;
}
f313. 2. 人口遷移(2020/10)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int v[60][60]={};
int n,m,k,w;
void out(){
for(int i=0;i<n+2;i++){
for(int j=0;j<m+2;j++){
cout<<v[i][j]<<" ";
}cout<<"\n";
}
return;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("2 3 4 1 \
10 2 -1 \
5 -1 2");
cin>>n>>m>>k>>w;
for(int i=0;i<n+2;i++){
for(int j=0;j<m+2;j++){
v[i][j]=-1;
}
}
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
cin>>v[i][j];
}
}
for(int t=0;t<w;t++){
int vv[60][60]={};
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
if(v[i][j]==-1)continue;
int g=v[i][j]/k;
if(v[i+1][j]!=-1){
vv[i][j]-=g;
vv[i+1][j]+=g;
}
if(v[i-1][j]!=-1){
vv[i][j]-=g;
vv[i-1][j]+=g;
}
if(v[i][j+1]!=-1){
vv[i][j]-=g;
vv[i][j+1]+=g;
}
if(v[i][j-1]!=-1){
vv[i][j]-=g;
vv[i][j-1]+=g;
}
}
}
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
v[i][j]+=vv[i][j];
}
}
}
int ma=LONG_LONG_MIN,mi=LONG_LONG_MAX;
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
if(v[i][j]>ma && v[i][j]!=-1){
ma=v[i][j];
}
if(v[i][j]<mi && v[i][j]!=-1){
mi=v[i][j];
}
}
}
cout<<mi<<"\n"<<ma;
return 0;
}
f606. 2. 流量(2021/1)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,k;
int mi=LONG_LONG_MAX;
int q[60][60];
signed main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>q[i][j];
}
}
for(int i=0;i<k;i++){
int v[60][60]={};
for(int j=0;j<n;j++){
int s;
cin>>s;
for(int k=0;k<m;k++){
v[s][k]+=q[j][k];
}
}
int sum=0;
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
if(i==j){
sum+=v[i][j]*1;
}
else{
if(v[i][j]>1000){
sum+=1000*3+(v[i][j]-1000)*2;
}
else{
sum+=v[i][j]*3;
}
}
}
}
mi=min(mi,sum);
}
cout<<mi;
return 0;
}
g276. 2. 魔王迷宮(2021/9)
約O(n^3)
#include <bits/stdc++.h>
using namespace std;
#define int long long
int v[200][200];
int b[600][4];
int die[600];
int n,m,k;
void outv(){
cout<<"\nv: ";
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<v[i][j]<<" ";
}cout<<"\n";
}
// cout<<"--------\n";
return;
}
void outb(){
cout<<"\n";
for(int i=0;i<k;i++){
if(die[i]==1){
continue;
}
cout<<i<<": ";
for(int j=0;j<4;j++){
cout<<b[i][j]<<" ";
}cout<<"\n";
}
cout<<"--------\n";
return;
}
void put(){
for(int i=0;i<k;i++){
if(die[i]==1){
continue;
}
int x=b[i][0];
int y=b[i][1];
int d=die[i];
// printf("k,x,y:%d %d %d\n",k,x,y);
v[x][y]=1;
}
return;
}
void mov(){
for(int i=0;i<k;i++){
if(die[i]==1){
continue;
}
if(b[i][0]+b[i][2]>=0 && b[i][0]+b[i][2]<n){
b[i][0]+=b[i][2];
}
else{
die[i]=1;
}
if(b[i][1]+b[i][3]>=0 && b[i][1]+b[i][3]<m){
b[i][1]+=b[i][3];
}
else{
die[i]=1;
}
}
return;
}
void tnt(){
int prtnt[200][200]={};
for(int i=0;i<k;i++){
if(die[i]==1)continue;
if(v[b[i][0]][b[i][1]]==1){
die[i]=1;
prtnt[b[i][0]][b[i][1]]=1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(prtnt[i][j]==1){
v[i][j]=0;
}
}
}
return;
}
int alldie(){
for(int i=0;i<k;i++){
if(die[i]==0)return 0;
}
return 1;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("1 6 3 \
0 0 0 0 \
0 2 0 -1 \
0 4 0 2");
// istringstream cin("5 5 2 \
0 0 3 2 \
0 0 2 3");
cin>>n>>m>>k;
for(int i=0;i<k;i++){
for(int j=0;j<4;j++){
cin>>b[i][j];
}
}
int w=4;
while(!alldie()){
put();
// outv();
// outb();
mov();
// outb();
tnt();
// outv();
// outb();
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(v[i][j]==1)ans++;
}
}
cout<<ans;
return 0;
}
約O(n^4)
#include <bits/stdc++.h>
using namespace std;
#define int long long
int v[200][200];
int b[600][4];
int die[600];
int n,m,k;
void outv(){
cout<<"\nv: ";
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<v[i][j]<<" ";
}cout<<"\n";
}
// cout<<"--------\n";
return;
}
void outb(){
cout<<"\n";
for(int i=0;i<k;i++){
if(die[i]==1){
continue;
}
cout<<i<<": ";
for(int j=0;j<4;j++){
cout<<b[i][j]<<" ";
}cout<<"\n";
}
cout<<"--------\n";
return;
}
void put(){
for(int i=0;i<k;i++){
if(die[i]==1){
continue;
}
int x=b[i][0];
int y=b[i][1];
int d=die[i];
// printf("k,x,y:%d %d %d\n",k,x,y);
v[x][y]=1;
}
return;
}
void mov(){
for(int i=0;i<k;i++){
if(die[i]==1){
continue;
}
if(b[i][0]+b[i][2]>=0 && b[i][0]+b[i][2]<n){
b[i][0]+=b[i][2];
}
else{
die[i]=1;
}
if(b[i][1]+b[i][3]>=0 && b[i][1]+b[i][3]<m){
b[i][1]+=b[i][3];
}
else{
die[i]=1;
}
}
return;
}
void tnt(){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(v[i][j]==0)continue;
// printf("v[i][j]: %d %d\n",i,j );
int tntt=0;
for(int kk=0;kk<k;kk++){
if(die[kk]==1)continue;
if(b[kk][0]==i && b[kk][1]==j){
die[kk]=1;
// printf("die: %d\n",kk );
tntt=1;
}
}
if(tntt==1)v[i][j]=0;
}
}
return;
}
int alldie(){
for(int i=0;i<k;i++){
if(die[i]==0)return 0;
}
return 1;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("1 6 3 \
0 0 0 0 \
0 2 0 -1 \
0 4 0 2");
// istringstream cin("5 5 2 \
0 0 3 2 \
0 0 2 3");
cin>>n>>m>>k;
for(int i=0;i<k;i++){
for(int j=0;j<4;j++){
cin>>b[i][j];
}
}
int w=4;
while(!alldie()){
put();
// outv();
// outb();
mov();
// outb();
tnt();
// outv();
// outb();
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(v[i][j]==1)ans++;
}
}
cout<<ans;
return 0;
}
需要很細心! g596. 2. 動線安排(2021/11)
需要很細心!h082. 2. 贏家預測(2022/1)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int v[1001][5]= {};
int vv[1001][5]= {};
int it=0;
int temp[1001][5]= {};
void outv() {
cout<<"{";
for(int i=0; i<n; i++) {
cout<<v[i][0]<<",";
}
cout<<"}";
cout<<"{";
for(int i=0; i<n; i++) {
cout<<v[i][1]<<",";
}
cout<<"}";
cout<<"{";
for(int i=0; i<n; i++) {
cout<<v[i][2]<<",";
}
cout<<"}";
cout<<"{";
for(int i=0; i<n; i++) {
cout<<v[i][3]<<",";
}
cout<<"}";
cout<<"{";
for(int i=0; i<n; i++) {
cout<<v[i][4]<<",";
}
cout<<"}";
cout<<"\n-------------\n";
return;
}
void outvv() {
cout<<"{";
for(int i=0; i<it; i++) {
cout<<vv[i][0]<<",";
}
cout<<"}";
cout<<"{";
for(int i=0; i<it; i++) {
cout<<vv[i][1]<<",";
}
cout<<"}";
cout<<"{";
for(int i=0; i<it; i++) {
cout<<vv[i][2]<<",";
}
cout<<"}";
cout<<"{";
for(int i=0; i<it; i++) {
cout<<vv[i][4]<<",";
}
cout<<"}";
cout<<"\n-------------\n";
return;
}
signed main() {
// istringstream cin("4 1 \
4 2 5 3 \
2 5 1 5 \
1 2 3 4");
// istringstream cin("4 5 \
4 1 5 3 \
6 5 1 6 \
4 1 3 2");
cin>>n>>m;
for(int i=0; i<n; i++) {
cin>>temp[i][1];
}
for(int i=0; i<n; i++) {
cin>>temp[i][2];
}
for(int i=0; i<n; i++) {
cin>>v[i][0];
}
// outv();
for(int i=0; i<n; i++) {
// printf("(%lld,%lld)\n",i+1,v[i][0]-1+1);
v[i][1]=temp[v[i][0]-1][1];
v[i][2]=temp[v[i][0]-1][2];
}
// outv();
int w=10;
while(n>1) {
for(int i=0; i<n-1; i+=2) {
int a=v[i][1];
int b=v[i][2];
int c=v[i+1][1];
int d=v[i+1][2];
// printf("(%lld,%lld):a*b=%lld c*d=%lld\n",v[i][0],v[i+1][0],a*b,c*d);
if(a*b>=c*d) {
a=v[i][1]+(v[i+1][1]*v[i+1][2])/(2*v[i][2]);
b=v[i][2]+(v[i+1][1]*v[i+1][2])/(2*v[i][1]);
c=v[i+1][1]+v[i+1][1]/2;
d=v[i+1][2]+v[i+1][2]/2;
v[i][1]=a;
v[i][2]=b;
v[i+1][1]=c;
v[i+1][2]=d;
// printf("1w a=%lld,b=%lld,c=%lld,d=%lld\n",a,b,c,d);
v[i][3]=1;
v[i+1][3]=-1;
v[i+1][4]++;
} else {
// printf("2w a=%lld,b=%lld,c=%lld,d=%lld\n",a,b,c,d);
// printf("2w (a*b)/(2*c)=%lld\n",(a*b)/(2*c));
a=v[i][1]+v[i][1]/2;
b=v[i][2]+v[i][2]/2;
c=v[i+1][1]+(v[i][1]*v[i][2])/(2*v[i+1][2]);
d=v[i+1][2]+(v[i][1]*v[i][2])/(2*v[i+1][1]);
v[i][1]=a;
v[i][2]=b;
v[i+1][1]=c;
v[i+1][2]=d;
// printf("2w a=%lld,b=%lld,c=%lld,d=%lld\n",a,b,c,d);
v[i][3]=-1;
v[i][4]++;
v[i+1][3]=1;
}
}
it=0;
for(int i=0; i<n; i++) {
if(v[i][3]==1) { //win
for(int j=0; j<5; j++) {
vv[it][j]=v[i][j];
}
it++;
}
}
for(int i=0; i<n; i++) {
if(v[i][3]==0) { //pe
for(int j=0; j<5; j++) {
vv[it][j]=v[i][j];
}
it++;
}
}
for(int i=0; i<n; i++) {
if(v[i][3]==-1 && v[i][4]!=m) { //los
for(int j=0; j<5; j++) {
vv[it][j]=v[i][j];
}
it++;
}
}
for(int i=0; i<it; i++) {
for(int j=0; j<5; j++) {
v[i][j]=vv[i][j];
}
v[i][3]=0;
}
n=it;
it=0;
}
cout<<v[0][0];
}
i400. 2. 字串解碼(2022/6)
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int v[200][200]={};
string s;
string ans;
string sub(int l,int r){
string re;
for(int i=l;i<=r;i++){
re+=s[i];
}
if(r<0){
return "";
}
return re;
}
string asub(int l,int r){
string re;
for(int i=l;i<=r;i++){
re+=ans[i];
}
return re;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("1 5 \
10110 \
CABAD");
// istringstream cin("3 6 \
111110 \
101101 \
000000 \
RETYWQ");
cin>>n>>m;
string c;
for(int i=0;i<n;i++){
cin>>c;
for(int j=0;j<m;j++){
v[i][j]=c[j]-'0';
}
}
cin>>s;
for(int i=n-1;i>=0;i--){
int sum=0;
for(int j=m-1;j>=1;j--){
int vv=v[i][j];
sum+=vv;
if(vv==0){
ans=s[j]+ans;
s=sub(0,s.size()-2);
}
else{
ans=ans+s[j];
s=sub(0,s.size()-2);
}
}
if(v[i][0]==0){
ans=s[0]+ans;
}
else{
ans=ans+s[0];
}
sum+=v[i][0];
s=ans;
int sn=s.size();
if(sn==2){
s=asub(1,1)+asub(0,0);
}
if(sn>2){
if(sum&1){//odd
if(sn%2==1){//01234
s=asub(sn/2+1,sn-1)+s[sn/2]+asub(0,sn/2-1);
}
else{//0123
s=asub(sn/2,sn-1)+asub(0,sn/2-1);
}
}
}
ans="";
}
cout<<s;
return 0;
}
j123. 2. 運貨站(2022/10)
#include<bits/stdc++.h>
using namespace std;
//#define int long long
int p[5][2][5]={
{{0,1,2,3},{0,0,0,0}},
{{0,0,0},{0,1,2}},
{{0,0,1,1},{0,1,0,1}},
{{1,1,1,0},{0,1,2,2}},
{{1,2,0,1,2},{0,0,1,1,1}}
};
int pn[5]={4,3,4,4,5};
int pw[5]={1,3,2,3,2};
int v[60][60]={};
int putp=0;
int n,m,k;
int blank(){
int sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(v[i][j]==0){
sum++;
}
}
}
return sum;
}
void output(){
for(int i=0;i<n+3;i++){
for(int j=0;j<m+3;j++){
cout<<v[i][j];
}
cout<<"\n";
}
cout<<"--------------\n";
return;
}
int canput(int x,int y,int type){
for(int i=0;i<pn[type];i++){
int xx=x+p[type][0][i];
int yy=y+p[type][1][i];
if(v[xx][yy]!=0){
return 0;
}
}
return 1;
}
int put(int x,int y,int type){
for(int i=0;i<pn[type];i++){
int xx=x+p[type][0][i];
int yy=y+p[type][1][i];
// printf("(%d,%d)(%d,%d)\n",x,y,xx,yy);
v[xx][yy]=type+1;
}
return 0;
}
signed main(){
// ios::sync_with_stdio(0);
// cin.tie(0);
// istringstream cin("5 6 6 \
C 1 \
A 1 \
E 0 \
E 0 \
B 0 \
A 0");
// istringstream cin("5 4 6 \
B 0 \
B 3 \
B 1 \
B 3 \
B 1 \
B 2");
for(int i=0;i<60;i++){
for(int j=0;j<60;j++){
v[i][j]=6;
}
}
cin>>n>>m>>k;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
v[i][j]=0;
}
}
for(int i=0;i<k;i++){
char a;
int b;
cin>>a>>b;
int type=a-'A';
// printf("type: %d\n",type);
int pux=b;
int puy=m-pw[type];
int w=0;
if(canput(pux,puy,type)){
w=1;
while(canput(pux,puy-1,type)){
puy-=1;
if(puy-1<0)break;
}
}
if(w==1){
put(pux,puy,type);
putp++;
}
// output();
}
// put(1,1,0);
// output();
cout<<blank()<<" "<<k-putp;
return 0;
}
j606. 2. 造字程式(2023/1)
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
// istringstream cin("5 4 1 \
abcde \
2 1 3 5 4 \
5 1 2 4 3 \
4 1 2 3 5 \
3 1 4 5 2");
// istringstream cin("4 3 4 \
abac \
4 1 3 2 \
1 2 3 4 \
2 3 4 1");
int k,q,r;
cin>>k>>q>>r;
char ans[100][100];
cin>>ans[0];
for(int i=1;i<q+1;i++){
for(int j=0;j<k;j++){
int x;
cin>>x;
ans[i][x-1]=ans[i-1][j];
}
}
for(int j=0;j<r;j++){
for(int i=1;i<=q;i++){
cout<<ans[i][j];
}
cout<<"\n";
}
return 0;
}
k732. 2. 特殊位置(2023/6)
m371. 2. 卡牌遊戲(2023/10)
m932. 2. 蜜蜂觀察(2024/1)
o077. 2. 電子畫布(2024/6)
程式碼
#include<bits/stdc++.h>
using namespace std;
#define N 555
#define nn "\n"
#define int long long
//---------------------------------------------------
int v[N][N];
//---------------------------------------------------
#undef int
int main(){
#define int long long
//---------------------------------------------------
//istringstream cin("6 7 3 \
3 2 2 1 \
1 6 1 2 \
1 3 2 5");
int n,m,k;
cin>>n>>m>>k;
for(int ii=0;ii<k;ii++){
int a,b,c,d;
cin>>a>>b>>c>>d;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(abs(a-i)+abs(b-j)<=c){
v[i][j]+=d;
}
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<v[i][j]<<" ";
}cout<<nn;
}
//---------------------------------------------------
}
o712. 2. 蒐集寶石2024/10
程式碼
q182. 2. 字串操作2024/1
程式碼
q837. 2. 轉盤得分2025/6
程式碼